Propósito explícito de Android con el componente de destino
¿Es posible disparar una intención explícita, pero no para una actividad de mi proyecto, sino para la actividad en alguna otra aplicación.
Estoy seguro de este código y sé que se está ejecutando
- ¿Cómo puede una aplicación detectar que va a desinstalarse?
- Diferencia entre las preferencias compartidas y los proveedores de contenido en android
- Manera alternativa de implementar un tirador deslizante que ha quedado obsoleto desde la api 17
- Volver a la actividad principal al presionar el botón del icono de la aplicación
- Propósito en android para decirle a la aplicación si se instala por primera vez
Intent i=new Intent(this,MyActivity.class);
Pero, ¿es posible hacer algo como esto
Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);
Quiero decir cuál es la manera exacta de iniciar explícitamente la actividad de otra aplicación (actividad que está contenida en otro apk), esto es posible en absoluto?
Lo intenté pero me cae forse mensaje cerrado … 🙁
- ¿Cómo enviar datos a través de PendingIntent a Broadcast?
- Cómo abrir la aplicación VKontakte con un amigo específico?
- NotificationCompat.Builder falta el método build ()
- Android ¿Intención de seguir al usuario de Twitter?
- Java.lang.RuntimeException: Handler (android.os.Handler) envío de mensajes a un Handler en un hilo muerto
- NullPointerException android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState
- Android: Pasar un mapa hash entre las actividades
- ¿Por qué Intent implementa Cloneable?
Si es posible. Pero la creación de la intención es diferente. Pruebe esto:
Intent intent = new Intent(); intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name")); startActivityForResult(intent);
Si es posible. Pero la creación de la intención es un poco diferente.
Intent intent = new Intent(); intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name")); startActivity(intent);
Pero, entonces simplemente no se puede llamar a ninguna actividad de cualquier aplicación aleatoria. Esa actividad en particular debe tener un filtro de intenciones con una acción PRINCIPAL.
Puede iniciar cualquier componente a través de la intención sólo necesita conocer el nombre de acción o componente de destino (pkg, cls).
Tenga en cuenta que he desarrollado dos aplicaciones app1 & app2 app1 pkg nombre es com.xyz.app1 & app2 pkg nombre es com.xyz.app2.
App1 tiene dos actividades App1MainActivity
y App1XyzActivity
, app2 tiene sólo una actividad App2MainActivity
ahora quiero iniciar la actividad de app1 desde app2 App2MainActivity
App2 App2MainActivity tiene dos botones b1 y b2 en clic b1 Quiero iniciar App1MainActivity y en clic b2 Quiero iniciar App1XyzActivity
entonces el código para el botón b1 y b2 dentro de App2MainActivity es
b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(); String pkg = "com.xyz.app1"; String cls = "com.xyz.app1.App1MainActivity"; i.setComponent(new ComponentName(pkg, cls)); App2MainActivity.this.startActivity(i); } }); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(); String pkg = "com.xyz.app1"; String cls = "com.xyz.app1.App1XyzActivity"; i.setComponent(new ComponentName(pkg, cls)); App2MainActivity.this.startActivity(i); } });
Ahora instalo ambas aplicaciones app1 & app2 y ejecuto la app2.
Cuando hago clic en el botón b1 entonces app1 App1MainActivity es iniciar pero si hago clic en el botón b2 se produce una excepción la razón es que no se puede iniciar de forma aleatoria cualquier actividad de otra aplicación, incluso si conoce el nombre del paquete y su nombre de clase pero puede iniciar Otra actividad principal de la aplicación si tiene filtro de intención con acción MAIN y si conoce su nombre de paquete y nombre de clase.
Sí, es posible, puede llamar a otra actividad de otro paquete como este.
Ver detalles aquí
Intent intent = new Intent(Intent.ACTION_MAIN); intent.setClassName("np.birthday.com.order", "np.birthday.com.order.MainActivity");// intent.setClassName("Package NAme of another application", "np.birthday.com.order.MainActivity"); startActivity(intent);
Sugeriría concatenar el nombre del paquete y de la clase con un punto;
Esto acelera copiar y pegar, por ejemplo. Mientras escribe pruebas jUnit.
String packageName = getApplicationContext().getPackageName(); String className = "SomeActivity"; Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, packageName + "." + className)); startActivity(intent);
- Detener las imágenes en la tarjeta sd de aparecer en la galería?
- Android: ¿Cómo puedo añadir enlaces HTML dentro de un ListView?