Cómo capturar una excepción (ActivityNotFoundException) durante el uso de LinkMovementMethod

Tengo actualmente un TextView con algunos números de teléfono HTML y url.

He notado que podemos usar el método setMovementMethod para hacer que estos vínculos se puedan hacer clic:

tv.setText("Phone number is: +32485123456 and url is http://www.blabla.com"); tv.setMovementMethod(LinkMovementMethod.getInstance()); 

Esto funciona bastante bien, pero en algunos dispositivos, se bloquea con ActivityNotFoundException y que es bastante understanble. (Ver código abajo)

Estos problemas aparecen en mi consola de desarrollo y no puedo reproducirlos.

El gran problema que estoy enfrentando es que no puedo intentar / capturar código en mi actividad como el clic es manejado por LinkMovementMethod

¿Alguna idea de cómo puedo evitar esos errores?

 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=www.vlaamsbrabant.be/zoutleeuw (has extras) } at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) at android.app.Activity.startActivityForResult(Activity.java:2817) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817) at android.app.Activity.startActivity(Activity.java:2923) at android.text.style.URLSpan.onClick(URLSpan.java:62) at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:216) at android.widget.TextView.onTouchEvent(TextView.java:6788) at android.view.View.dispatchTouchEvent(View.java:3766) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1896) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1159) at android.app.Activity.dispatchTouchEvent(Activity.java:2086) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1880) at android.view.ViewRoot.handleMessage(ViewRoot.java:1811) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(Native Method) 

Siempre puedes extender LinkMovementMethod y capturar el error allí.

Algo como:

 private class MovementCheck extends LinkMovementMethod { @Override public boolean onTouchEvent( TextView widget, Spannable buffer, MotionEvent event ) { try { return super.onTouchEvent( widget, buffer, event ) ; } catch( Exception ex ) { Toast.makeText( MainActivity.this, "Could not load link", Toast.LENGTH_LONG ).show(); return true; } } } 

Mostrará un mensaje de error en el caso de que no haya una configuración de aplicación para manejar la intención.

Otra opción es utilizar el método en esta pregunta para determinar antes de tiempo si algo está preparado para manejar sus enlaces.

Si su textview su origen está en xml usted puede intentar un aproach definido aquí .
Maby (estoy casi seguro de ello.) Pero el sistema operativo manejar esto para u.

Si esto no funciona, entonces debe escribir el código de independencia del dispositivo para tablets y para teléfonos. En este caso, maby que esta publicación te guiará. Cuando es un teléfono que permitirá la vinculación y de lo contrario no.

Maby separar los 2 enlaces en 2 textviews porque el OS puede hacer cualquiera de los enlaces (sitio web) thats forma prob lo hace clicable y se bloquea cuando se intenta hacer clic en el número uno phonenumber

Espero que esto ayude.

  • Imágenes en TextView
  • ¿Cómo manejar texto largo en las preferencias de Android?
  • Animación al cambiar la vista de texto
  • Cómo configurar unicode en textview para mostrar emoji en android?
  • ¿Cómo hacer que una parte del texto haga clic como botón en Android?
  • Ajuste automático de TextView para Android
  • Cómo influenciar linebreak en Android Textview
  • Android: No se puede utilizar android.R.drawable como imagen de fondo para textview
  • Android Horizontal LinearLayout - Envolver elementos
  • Establecer eventos onclick en la vista de texto creada mediante programación
  • XAMARIN (C #) - ¿Hay una manera de subrayar un TextView mediante programación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.