2010-07-27 5 views
27

Quiero iniciar una aplicación específica. Sé cómo hacer Intents 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.¿Cómo ejecuto programáticamente una aplicación específica en Android?

+1

posible duplicado de [abrir otra aplicación desde nuestra aplicación?] (http://stackoverflow.com/questions/3342655/open-another-one-application-from-our-application) Si – Pentium10

Respuesta

23

se utiliza el nombre del paquete/clase directamente, por ejemplo, para crear un nuevo intento para llamar al programa Twidroid tendrá que utilizar la siguiente link text:

Intent intent = new Intent("com.twidroid.SendTweet"); 

Probablemente usted quiere poner un try/busca un ActivityNotFoundException para cuando la aplicación no está instalada.

+4

sucede, puede lanzar una excepción y abrir la aplicación en GooglePlay. ;) –

8
Intent intent = new Intent();  
intent.setClassName("package.name", "package.name.LauncherActivityName"); 
startActivityForResult(intent,REQUEST_CODE); 
3

La actividad a la que llama debe aparecer no sólo en el Manifiesto por su propio paquete, pero en el manifiesto del paquete de llamadas, también. - no lo olvides!

44

Debe usar la función del administrador 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 
} 
+1

¿Qué es ctx? ¿objeto o palabra clave? – Azahar

+2

Es un [Objeto de contexto de Android] (http://developer.android.com/reference/android/content/Context.html), p. una actividad o el valor de retorno de getApplicationContext(). – Carni

+0

bien. gracias carmi +1 – Azahar

3

que utilizo:

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()); 
} 
1

en llamada al método alcrear => 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; 
} 
+0

¡Muchas gracias por Gmail! –

Cuestiones relacionadas