vínculo versión studio publiques prueba produccion para otra llamar lanzamiento interna iniciar habilitar fuente ejemplos deshabilitado desde cuando codigos codigo aquí aplicación aplicaciones aplicacion aparecerá abrir android

android - versión - iniciar lanzamiento de version en produccion



Código para lanzar aplicaciones externas explícitamente (6)

A partir de API23, podría usar el método ComponentName.createRelative (String pkg, String cls) y hacer:

ComponentName cn = new ComponentName(ComponentName.createRelative("com.myOtherApp", ".OtherAppActivity")); Intent intent = new Intent(); intent.setComponent(cn); context.startActivity(intent);

De esta manera, puede crear un objeto ComponentName utilizando una ruta de clase relativa. Cuidado con el punto en el inicio de la ruta de clase. Es necesario indicar que el método debe tratar el segundo argumento como una ruta relativa. Al igual que lo mencionó @Sogger, el constructor ComponentName restringe el parámetro de clase para que sea una ruta absoluta.

Tenga en cuenta también que de esta manera, está utilizando intentos explícitos y no tiene que insertar ningún filtro de intento adicional a la actividad de destino.

Desde una de mis aplicaciones, estoy intentando lanzar otra. Quiero usar una intención explícita.

ComponentName cn = new ComponentName("com.myOtherApp", "OtherAppActivity"); Intent intent = new Intent(); intent.setComponent(cn); context.startActivity(intent);

Sin embargo, cuando ejecuto ese código, pregunta si he declarado esa actividad en mi manifiesto. Sin embargo, cuando pongo lo siguiente en el manifiesto, obtengo el mismo error:

<activity android:name="com.myOtherApp.OtherAppActivity"> </activity>

¿Qué estoy haciendo mal?

Gracias


Además de @Sogger, lo que sí debe recordar es si su clase receptora es com.myOtherApp.receiver.OtherAppActivity y el paquete mencionado en AndroidManifest es com.myOtherApp su código será

ComponentName cn = new ComponentName("com.myOtherApp", "com.myOtherApp.receiver.OtherAppActivity");


Crea el intento como acción. Mantente y agrega la categoría de iniciador :

Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER");


Debe especificar el nombre de clase completamente calificado en el segundo parámetro de nuevo ComponentName como este:

ComponentName cn = new ComponentName("com.myOtherApp", "com.myOtherApp.OtherAppActivity");

Creo que esto se debe a que el nombre del paquete en el manifiesto y el nombre de la actividad no necesariamente tienen que tener la misma ruta del paquete, por lo que la nueva llamada a ComponentName no infiere que el segundo parámetro del nombre de la clase tiene el prefijo del primer parámetro del nombre del paquete.


Intenta algo como esto ...

En el manifiesto de ''myOtherApp'' use un filtro de intento para ''OtherAppActivity'' con un intento específico de la empresa, ejemplo ...

<activity android:name=".OtherAppActivity" android:label="@string/app_name" > <intent-filter> <action android:name="com.mycompany.DO_SOMETHING" /> </intent-filter> </activity>

Luego, en la aplicación ''llamada'', usa ...

Intent intent = new Intent(); intent.setAction("com.mycompany.DO_SOMETHING"); context.startActivity(intent);


Tuve este problema y busqué durante horas buscando una solución. Finalmente lo encontré: http://www.krvarma.com/2010/08/launching-external-applications-in-android . Ese enlace muestra cómo usar el administrador de paquetes para iniciar cualquier aplicación para la que tenga simplemente el nombre del paquete:

PackageManager pm = this.getPackageManager(); try { Intent it = pm.getLaunchIntentForPackage(sName); if (null != it) this.startActivity(it); } catch (ActivityNotFoundException e) { }