2010-07-27 5 views
27

Voglio avviare un'applicazione specifica. So come fare Intenti ma voglio evitare il menu di selezione se ci sono più app in grado di gestire l'intento, voglio andare direttamente ad una particolare app. Spero che questo abbia un senso.Come si avvia a livello di programmazione un'applicazione specifica in Android?

+1

possibile duplicato di [Aprire un'altra applicazione dalla nostra applicazione?] (http://stackoverflow.com/questions/3342655/open-another-one-application-from-our-application) – Pentium10

risposta

23

si utilizza il nome del pacchetto/classe e, ad esempio, per creare un nuovo intento di chiamare il programma Twidroid devi utilizzare il seguente link text:

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

Si sarebbe probabilmente vuole mettere un try/prendi in giro per ActivityNotFoundException per quando l'applicazione non è installata.

+4

Se succede, puoi lanciare un'eccezione e aprire l'applicazione su GooglePlay. ;) –

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

L'attività si sta chiamando dovrebbe apparire non solo nel Manifesto per il proprio pacchetto, ma nel Manifesto per il pacchetto di chiamata, anche. - Non dimenticare!

44

È necessario utilizzare la funzione del gestore pacchetti.

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

Che cos'è ctx? oggetto o parola chiave? – Azahar

+2

È un [oggetto contesto Android] (http://developer.android.com/reference/android/content/Context.html), ad es. un'attività o il valore di ritorno di getApplicationContext(). – Carni

+0

ok. grazie carmi +1 – Azahar

3

io uso:

try { 
     Intent intent = new Intent();  
     intent.setClassName("package.name", "<your_package_name>"); 
     startActivity(intent); 
    } catch (NameNotFoundException e) { 
     Log.e(TAG, e.getMessage()); 
    } 

Ma come Cami suggerito questo funzionerà anche:

try { 
    Intent i = ctx.getPackageManager().getLaunchIntentForPackage("com.twidroid.SendTweet"); 
    ctx.startActivity(i); 
} catch (NameNotFoundException e) { 
    Log.e(TAG, e.getMessage()); 
} 
1

nella chiamata di metodo OnCreate => openapp(); Metodo

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

Grazie mille per gmail! –

Problemi correlati