manifests - uses permission android name android permission access_superuser/>
¿Cómo lanzo programáticamente una aplicación específica en Android? (8)
Quiero lanzar una aplicación específica. Sé cómo hacer intenciones, pero quiero evitar el menú de selección si hay varias aplicaciones que pueden manejar la intención, quiero ir directamente a una aplicación en particular. Espero que esto tenga sentido.
Debe utilizar la función del gestor de paquetes.
Context ctx=this; // or you can replace **''this''** with your **ActivityName.this**
try {
Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet");
ctx.startActivity(i);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
}
He resuelto el problema por
String packageName = "Your package name"; Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); if(intent == null) { try { // if play store installed, open play store, else open browser intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); } catch (Exception e) { intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)); } } startActivity(intent);
La actividad a la que llama debe aparecer no solo en el Manifiesto para su propio paquete, sino también en el Manifiesto para el paquete de LLAMADAS. - ¡No lo olvides!
Utiliza el nombre del paquete / clase directamente, por ejemplo, para crear una nueva intención de llamar al programa twidroid que usaría el siguiente texto de enlace :
Intent intent = new Intent("com.twidroid.SendTweet");
Probablemente querrá poner un try / catch alrededor de una excepción ActivityNotFoundException para cuando la aplicación no esté instalada.
Yo suelo:
try {
Intent intent = new Intent();
intent.setClassName("package.name", "<your_package_name>");
startActivity(intent);
} catch (NameNotFoundException e) {
Log.e(TAG, e.getMessage());
}
Pero como Cami sugirió que esto funcionará también:
try {
Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet");
ctx.startActivity(i);
} catch (NameNotFoundException e) {
Log.e(TAG, e.getMessage());
}
en el método oncreate llamada => openApp (); método
private void openApp() {
String packageName = "com.google.android.gm";
if (isAppInstalled(activity, packageName))
startActivity(getPackageManager().getLaunchIntentForPackage(packageName));
else Toast.makeText(activity, "App not installed", Toast.LENGTH_SHORT).show();
}
public static boolean isAppInstalled(Activity activity, String packageName) {
PackageManager pm = activity.getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
}
return false;
}
Digamos que quieres abrir Wonder Clock desde tu aplicación
URL: https://play.google.com/store/apps/details?id=ganesha.diva.app.wonderclock.free&hl=en_US
El campo id / nombre del paquete es de nuestro interés = ganesha.diva.app.wonderclock.free
El Administrador de paquetes realiza un seguimiento de las aplicaciones instaladas en el dispositivo y mantiene la lista de los paquetes. Por lo tanto, cualquier cosa relacionada con las aplicaciones instaladas en el dispositivo, debe consultarse el Administrador de paquetes.
La identificación del paquete o el nombre del paquete es único en todo el mundo, por lo que puede utilizarse para verificar la existencia del paquete / aplicación en el dispositivo.
Para abrir el Wonder Clock
desde tu aplicación
Pregunte a Package Manager, para la actividad del iniciador del nombre del paquete dado
Intent intent = context.getPackageManager().getLaunchIntentForPackage("ganesha.diva.app.wonderclock.free");
- Compruebe si existe actividad del iniciador o no
if(intent != null) continue...
contrario, la aplicación no está instalada en el dispositivo. Lleve al usuario a la URL. - Agregue los indicadores necesarios a la intención
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- iniciar la actividad
startActivity(intent);
Intent intent = new Intent();
intent.setClassName("package.name", "package.name.LauncherActivityName");
startActivityForResult(intent,REQUEST_CODE);