¿Determinando si existe una actividad en el dispositivo actual?

¿Hay alguna manera de verificar y ver si existe una actividad en tu dispositivo? Si tengo un enlace de video de YouTube, quiero especificar que se abra en YouTube PlayerActivity. Sin embargo, no quiero colapsar si por alguna razón no lo tienen.

¿Hay alguna manera de verificar y ver si la actividad existe? No creo que pueda detectar la excepción de tiempo de ejecución ya que startActivity () no lo arroja.

No creo que pueda atrapar la excepción de tiempo de ejecución

En realidad, esto funciona:

try { startActivity(new Intent(..)); } catch (ActivityNotFoundException e) { Toast.makeText(this, "Not installed.", LENGTH_SHORT).show(); } 

Puede crear un objeto Intent con la información del componente necesaria y luego verificar si el bash es invocable o no. Me encontré con este fragmento aquí en SO, no tengo el enlace al hilo real.

 private boolean isCallable(Intent intent) { List list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } 

Esta es la forma más simple de hacer esto:

 boolean activityExists = intent.resolveActivityInfo(getPackageManager(), 0) != null; 

También es el recomendado por Google :

Para verificar primero que existe una aplicación para recibir el bash, llame a resolveActivity() en su objeto Intent. Si el resultado no es nulo, hay al menos una aplicación que puede manejar el bash y es seguro llamar a startActivity() . Si el resultado es nulo, no debe usar el bash y, si es posible, debe desactivar la función que invoca el bash.

Terminé haciendo:

  Intent intent = new Intent(); intent.setClassName( "com.google.android.gsf", "com.google.android.gsf.login.AccountIntroActivity" ); if(getContext().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) { getContext().startActivity( intent ); } else { getContext().startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT)); } 

Esto garantiza que exista la intención de agregar cuenta específica de Google, y si no, vuelve a los ACTION_ADD_ACCOUNTS generales más generales.

Así es como compruebo si hay una Activity disponible en el dispositivo:

  Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tell//:" + phoneNumber)); PackageManager manager = context.getPackageManager(); List activities = manager.queryIntentActivities( intent, 0); if (!manager.hasSystemFeature( PackageManager.FEATURE_TELEPHONY) || activities == null || activities .size() < 1) { Toast.makeText( context, "Sorry, there were no apps that worked with that request.", Toast.LENGTH_SHORT).show(); } else { context.startActivity(intent); }