Android: Actividad de llamada de otra aplicación

Tengo dos aplicaciones de Android, supongo que son "A" y "B", "A" tiene cinco actividades y quiero llamar a su actividad específica de clic de botón evento de "B". He probado esta forma de llamar a una aplicación de otra:

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws"); startActivity(LaunchIntent); 

"Com.testapp.ws" es el nombre del paquete de "A".

Esto ejecuta "A" de su primera actividad de nuevo no de la actividad específica. ¿Cómo puedo llamar a la actividad especificada de A?

Conceder,

El problema aquí es claramente un malentendido del Modelo de Aplicación de Android. Commonsware es absolutamente correcto acerca de cómo resolver este problema. Sin embargo, sin entender los fundamentos de Android, puedo ver por qué tiene dificultades para aplicarlo. Por lo tanto, una explicación rápida:

Cada acción en Android comienza con una Intención. Esto es particularmente cierto para las actividades. Cada actividad tiene una intención. Para que la interfaz sea fácil para los desarrolladores, puede responder a una intención del sistema operativo, o puede crear una intención de la clase Actividades para usar. En general, es la mejor práctica hacer la primera opción.

Respondiendo a una Intención

Al escoger un intento de responder, literalmente puede responder a cualquier intención. Esto se llama una Acción. Si creé un Intent llamado "FOO", la Actividad de Bar podría recogerlo y responder. Tenemos convenciones, sin embargo, y el primario de ésos es prepend su nombre del paquete a cualquier intención que usted haga. Por ejemplo, "com.company.package.FOO". En pocas palabras, esto es para evitar colisiones con otras aplicaciones.

Cada actividad puede responder a diferentes eventos. Esto se define en el AndroidManifest.xml.

 <activity android:name="Activity3" ... > <intent-filter> <action android:name="com.company.package.FOO"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Arriba, también definimos la categoría como DEFAULT, de modo que a menos que el usuario la cambie, seremos la única aplicación que responde a nuestro Propósito personalizado. La forma en que entonces llamamos a la Intención es usando el MISMO NOMBRE que creamos (es decir, "com.company.package.FOO")

 startActivity(new Intent("com.company.package.FOO")); 

¡Asi es como funciona! Simplemente cambiaría el "com.company.package.FOO" anterior al nombre del paquete (definido por su aplicación) y algo significativo. Un ejemplo es "com.testapp.ws.SWAT_FLIES".

¿Por qué su código no funciona?

 Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.testapp.ws"); 

El código anterior busca una acción específica de TIPO de Intención. Recuerda cuando hiciste el AndroidManifest y la primera Actividad que pusiste:

  <action android:name="android.intent.action.MAIN"> <category android:name="android.intent.category.LAUNCHER"> 

Bueno … getLaunchIntentForPackage () solo obtiene el Propósito para esa primera Actividad. Es por eso que hacemos un intento personalizado … En primer lugar, porque en realidad no queremos que sea nuestra 3 ª actividad para ser nuestra puesta en marcha … Y en segundo lugar, porque el sistema operativo nos dirá sólo la Actividad de inicio. Tenemos que decirlo con nuestra propia acción (es decir, "com.testapp.ws.SWAT_FLIES")

Espero que esto ayude,

FuzzicalLogic

Paso # 1: Agregue un <intent-filter> a la tercera actividad con una acción personalizada:

 <intent-filter> <action android:name="com.testapp.ws.SOMETHING_USEFUL"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

Paso # 2: Comience esa actividad usando una Intent apropiada:

 startActivity(new Intent("com.testapp.ws.SOMETHING_USEFUL")); 

Aquí está el código para abrir una aplicación (whatsapp ex) de otra aplicación

Public class MainActivity extends Actividad {

 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bClock = (Button) findViewById(R.id.button1); bClock.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent(Intent.ACTION_MAIN); PackageManager managerclock = getPackageManager(); i = managerclock.getLaunchIntentForPackage("com.whatsapp"); i.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(i); } }); 

}}

Hay casos en los que puede que no utilice dos aplicaciones para las que tenga capacidades de edición específicas o que no quiera realizar intentos personalizados, de modo que en ese caso existe una alternativa (con un mejor error al comprobar la disponibilidad):

 Intent intent = new Intent(); intent.setClassName("PACKAGE_NAME", "PACKAGE_NAME.TARGET_ACTIVITY"); if (isCallable(context, intent)) { // Attach any extras, start or start with callback } else { // Respond to the application or activity not being available } 

En algún lugar de la clase principal o en una subclase que maneja métodos generales:

 public static boolean isCallable(Activity activity, Intent intent) { List<ResolveInfo> list = activity.getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } 
  • No hay animación para Android al pasar de una actividad de retrato a una actividad de paisaje
  • GetActivity () había devuelto null cuando isDetached () había devuelto false
  • Finalizar la actividad infantil cuando la actividad de los padres se detiene
  • Android: cómo crear una actividad transparente con temas de diálogo
  • Convertir la actividad en fragmento
  • No se puede eliminar la barra de título en Actividad
  • Transición de la actividad en Android
  • Ciclo de vida de la actividad
  • Android: ¿Cómo vas a otra actividad al hacer clic?
  • Android inicio actividad de servicio
  • Android - ¿Cómo crear la carpeta en sdcard con el icono de la aplicación con la esquina izquierda hacia abajo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.