studio putextra intent intenciones getintextra developer boot_completed action_send android android-intent

android - putextra - intent-filter



Abra otra aplicaciĆ³n suya(intento) (20)

Sé cómo actualizar mis propios programas, y sé cómo abrir programas usando un Uri predefinido (para sms o correo electrónico, por ejemplo)

Necesito saber cómo puedo crear una intención para abrir MyTracks o cualquier otra aplicación que no sé qué intenciones escuchan.

Recibí esta información de DDMS, pero no he tenido éxito en convertir esto en un Intento que puedo usar. Esto se toma al abrir MyTracks manualmente.

Gracias por tu ayuda

05-06 11:22:24.945: INFO/ActivityManager(76): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks bnds=[243,338][317,417] } 05-06 11:22:25.005: INFO/ActivityManager(76): Start proc com.google.android.maps.mytracks for activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: pid=1176 uid=10063 gids={3003, 1015} 05-06 11:22:26.995: INFO/ActivityManager(76): Displayed activity com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks: 1996 ms (total 1996 ms)


Lanzar una aplicación desde otra aplicación en Android

Intent launchIntent = getActivity.getPackageManager().getLaunchIntentForPackage("com.ionicframework.uengage"); startActivity(launchIntent);


// Esto funciona en Android Lollipop 5.0.2

public static boolean launchApp(Context context, String packageName) { final PackageManager manager = context.getPackageManager(); final Intent appLauncherIntent = new Intent(Intent.ACTION_MAIN); appLauncherIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> resolveInfos = manager.queryIntentActivities(appLauncherIntent, 0); if ((null != resolveInfos) && (!resolveInfos.isEmpty())) { for (ResolveInfo rInfo : resolveInfos) { String className = rInfo.activityInfo.name.trim(); String targetPackageName = rInfo.activityInfo.packageName.trim(); Log.d("AppsLauncher", "Class Name = " + className + " Target Package Name = " + targetPackageName + " Package Name = " + packageName); if (packageName.trim().equals(targetPackageName)) { Intent intent = new Intent(); intent.setClassName(targetPackageName, className); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); Log.d("AppsLauncher", "Launching Package ''" + packageName + "'' with Activity ''" + className + "''"); return true; } } } return false; }


Abra la aplicación si existe, o abra la aplicación Play Store para instalarla:

private void open() { openApplication(getActivity(), "com.app.package.here"); } public void openApplication(Context context, String packageN) { Intent i = context.getPackageManager().getLaunchIntentForPackage(packageN); if (i == null) { i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); } else { try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN))); } catch (android.content.ActivityNotFoundException anfe) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN))); } } }


Al usar la solución de inversus, amplié el fragmento con una función que se ejecutará cuando la aplicación deseada no esté instalada en este momento. Entonces funciona así: ejecuta la aplicación por nombre del paquete. Si no se encuentra, abra Android market - Google play para este paquete .

public void startApplication(String packageName) { try { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info : resolveInfoList) if(info.activityInfo.packageName.equalsIgnoreCase(packageName)) { launchComponent(info.activityInfo.packageName, info.activityInfo.name); return; } // No match, so application is not installed showInMarket(packageName); } catch (Exception e) { showInMarket(packageName); } } private void launchComponent(String packageName, String name) { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.setComponent(new ComponentName(packageName, name)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } private void showInMarket(String packageName) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }

Y se usa así:

startApplication("org.teepee.bazant");


Alternativamente, también puede abrir el intento desde su aplicación en la otra aplicación con:

Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);

donde uri es el enlace profundo a la otra aplicación


Como las aplicaciones no pueden cambiar muchas de las configuraciones del teléfono, puede abrir una actividad de configuración como otra aplicación.

Mire su salida de LogCat después de que realmente modificó la configuración manualmente:

INFO/ActivityManager(1306): Starting activity: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.DevelopmentSettings } from pid 1924

Luego, use esto para mostrar la página de configuración desde su aplicación:

String SettingsPage = "com.android.settings/.DevelopmentSettings"; try { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(ComponentName.unflattenFromString(SettingsPage)); intent.addCategory(Intent.CATEGORY_LAUNCHER ); startActivity(intent); } catch (ActivityNotFoundException e) { log it }


En primer lugar, el concepto de "aplicación" en Android es ligeramente extenso.

Una aplicación, técnicamente un proceso, puede tener múltiples actividades, servicios, proveedores de contenido y / o radio escuchas. Si al menos uno de ellos se está ejecutando, la aplicación está en funcionamiento (el proceso).

Entonces, lo que tiene que identificar es cómo quiere "iniciar la aplicación".

Ok ... esto es lo que puedes probar:

  1. Crea un intento con action=MAIN y category=LAUNCHER
  2. Obtenga el PackageManager del contexto actual usando context.getPackageManager
  3. packageManager.queryIntentActivity(<intent>, 0) donde intento tiene category=LAUNCHER , action=MAIN o packageManager.resolveActivity(<intent>, 0) para obtener la primera actividad con main / launcher
  4. Obtenga la ActivityInfo que está interesado
  5. Desde ActivityInfo , obtenga el name del packageName y el name
  6. Finalmente, cree otro intento con category=LAUNCHER , action=MAIN , componentName = new ComponentName(packageName, name) y setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  7. Finalmente, context.startActivity(newIntent)

Este es el código de mi solución basada en la solución MasterGaurav:

private void launchComponent(String packageName, String name){ Intent launch_intent = new Intent("android.intent.action.MAIN"); launch_intent.addCategory("android.intent.category.LAUNCHER"); launch_intent.setComponent(new ComponentName(packageName, name)); launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(launch_intent); } public void startApplication(String application_name){ try{ Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveinfo_list = activity.getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info:resolveinfo_list){ if(info.activityInfo.packageName.equalsIgnoreCase(application_name)){ launchComponent(info.activityInfo.packageName, info.activityInfo.name); break; } } } catch (ActivityNotFoundException e) { Toast.makeText(activity.getApplicationContext(), "There was a problem loading the application: "+application_name,Toast.LENGTH_SHORT).show(); } }


Lo he trabajado así,

/** Open another app. * @param context current Context, like Activity, App, or Service * @param packageName the full package name of the app to open * @return true if likely successful, false if unsuccessful */ public static boolean openApp(Context context, String packageName) { PackageManager manager = context.getPackageManager(); try { Intent i = manager.getLaunchIntentForPackage(packageName); if (i == null) { return false; //throw new ActivityNotFoundException(); } i.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(i); return true; } catch (ActivityNotFoundException e) { return false; } }

Ejemplo de uso:

openApp(this, "com.google.android.maps.mytracks");

Espero que ayude a alguien.


Para API nivel 3+, nada más que una línea de código:

Intent intent = context.getPackageManager().getLaunchIntentForPackage("name.of.package");

Devuelve un intento de lanzamiento de CATEGORY_INFO (aplicaciones sin actividad de iniciador, fondos de pantalla, por ejemplo, a menudo lo utilizan para proporcionar información sobre la aplicación) y, si no lo encuentra, devuelve CATEGORY_LAUNCH del paquete, si existe.


Para iniciar otra actividad de aplicación desde mi aplicación Actividad. Está funcionando bien para mí.

El siguiente código funcionará si la otra aplicación ya está instalada en su teléfono, de lo contrario no es posible redireccionar de una aplicación a otra. Por lo tanto, asegúrese de que su aplicación se haya iniciado o no.

Intent intent = new Intent(); intent.setClassName("com.xyz.myapplication", "com.xyz.myapplication.SplashScreenActivity"); startActivity(intent);


Prueba este código, espero que esto te ayude. Si este paquete está disponible, esto abrirá la aplicación o abrirá la tienda de juegos para descargar

String packageN = "aman4india.com.pincodedirectory"; Intent i = getPackageManager().getLaunchIntentForPackage(packageN); if (i != null) { i.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(i); } else { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageN))); } catch (android.content.ActivityNotFoundException anfe) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageN))); } }



Si desea abrir otra aplicación y no está instalada, puede enviarla a la tienda de aplicaciones de Google para descargarla

  1. Primero crea el método openOtherApp por ejemplo

    public static boolean openApp(Context context, String packageName) { PackageManager manager = context.getPackageManager(); try { Intent intent = manager.getLaunchIntentForPackage(packageName); if (intent == null) { //the app is not installed try { intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse("market://details?id=" + packageName)); context.startActivity(intent); } catch (ActivityNotFoundException e) { //throw new ActivityNotFoundException(); return false; } } intent.addCategory(Intent.CATEGORY_LAUNCHER); context.startActivity(intent); return true; } catch (ActivityNotFoundException e) { return false; } }

2.- Uso

openOtherApp(getApplicationContext(), "com.packageappname");


Si está intentando iniciar un SERVICIO en lugar de actividad, esto funcionó para mí:

Intent intent = new Intent(); intent.setClassName("com.example.otherapplication", "com.example.otherapplication.ServiceName"); context.startService(intent);

Si usa el método intent.setComponent (...) como se menciona en otras respuestas, puede recibir una advertencia de "Intentos implícitos con startService no es seguro".


Si ya tiene el nombre del paquete que desea activar, puede usar el siguiente código, que es un poco más genérico:

PackageManager pm = context.getPackageManager(); Intent appStartIntent = pm.getLaunchIntentForPackage(appPackageName); if (null != appStartIntent) { context.startActivity(appStartIntent); }

Descubrí que funciona mejor para los casos en los que la actividad principal no se encontró mediante el método habitual de iniciar la actividad PRINCIPAL.


Use lo siguiente:

String packagename = "com.example.app"; startActivity(getPackageManager().getLaunchIntentForPackage(packagename));


Utilizar esta :

PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("com.package.name"); startActivity(intent);


Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(ComponentName.unflattenFromString("com.google.android.maps.mytracks/com.google.android.apps.mytracks.MyTracks")); intent.addCategory(Intent.CATEGORY_LAUNCHER); startActivity(intent);

EDITAR:

como se sugiere en los comentarios, agregue una línea antes de startActivity(intent);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("package_name","package_name.class_name")); intent.putExtra("grace", "Hi"); startActivity(intent);