Determinar si existe una actividad en el dispositivo actual?

¿Hay una manera de comprobar y ver si hay una actividad en su dispositivo? Si tengo un enlace de video de YouTube, quiero especificarlo en YouTube PlayerActivity. Sin embargo, no quiero caer si por alguna razón no lo tienen.

¿Hay una manera de comprobar y ver si la actividad existe? No creo que pueda captar la excepción de tiempo de ejecución ya que startActivity () no lo lanza.

No creo que pueda detectar 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(); } 

Usted podría crear un objeto de intención con la información necesaria del componente y después comprobar si la intención es callable o not.I tropezó sobre este fragmento aquí en SO, no tiene el acoplamiento al thread real.

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

Esta es la manera más sencilla de hacer esto:

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

También es la recomendada por Google :

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

Acabé 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 existe la intención de agregar una cuenta específica de google, y si no, vuelve a caer en el general más general ACTION_ADD_ACCOUNTS.

A continuación, le indicamos cómo comprobar 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<ResolveInfo> 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); } 
  • Android onActivityResult
  • Necesidad de la actividad del androide para esperar hasta que la localización GPS obtenida
  • Menú de tipo ListView anidado de forma arbitraria de Android
  • La actividad está parpadeando tras el cambio de configuración regional en Android 4.1+
  • El mismo botón en múltiples actividades
  • ActivityManager: Excepción lanzada al iniciar las actividades java.lang.IllegalArgumentException: val.length> 91
  • Cómo iniciar / iniciar el android estilo de actividad más rápido
  • Pasar el paquete al conjunto de actividades como tarea única
  • ¿Por qué AlertDialog.Builder (Context context) sólo acepta Actividad como parámetro?
  • ¿Qué sucede con el subproceso como onDestroy se llama cuando se gira el dispositivo
  • Android, Guardar y cargar un mapa de bits en caché de diferentes actividades
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.