Codice per lanciare esplicitamente l'applicazione esterna

Da una delle mie applicazioni, sto cercando di lanciare un altro. Voglio usare un intento esplicito.

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

Quando eseguo questo codice, tuttavia, chiede se ho dichiarato che l'attività nel mio manifesto. Tuttavia, quando inserisco nel manifesto, ottengo lo stesso errore:

  • Stampa lunga in Webview - App Crash
  • NestedScrollView e Horizontal RecyclerView Scorrimento liscio
  • passare il fagiolo arrayslist da android a webservice php
  • Come controllare in modo programmato la disponibilità di connessione internet in Android?
  • Come creare AppBarLayout che sovrappone il contenuto di CoordinatorLayout
  • Impostare una connessione VPN in modo programmato su android 4.0
  •  <activity android:name="com.myOtherApp.OtherAppActivity"> </activity> 

    Che cosa sto facendo di sbagliato?

    Grazie

    6 Solutions collect form web for “Codice per lanciare esplicitamente l'applicazione esterna”

    Prova qualcosa di simile …

    Nel manifesto per 'myOtherApp' usa un filter di intenti per 'OtherAppActivity' con una specifica azienda, esempio …

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

    Quindi, nell'app "chiamata", utilizzare …

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

    Ho avuto questo problema e ho cercato ore cercando una soluzione. Alla fine l'ho trovato: http://www.krvarma.com/2010/08/launching-external-applications-in-android . Questo collegamento mostra come utilizzare il gestore pacchetti per avviare un'applicazione per il quale è sufficiente il nome del pacchetto:

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

    È necessario specificare il nome di class pienamente qualificato nel secondo parametro di nuovo componente come questo:

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

    Penso che questo sia perché il nome del pacchetto nel manifesto e nel nome dell'attività non deve necessariamente avere lo stesso path di pacchetti, quindi la nuova chiamata ComponentName non conclude che il parametro secondo nome di class sia prefisso dal primo parametro del nome del pacchetto.

    Oltre alla risposta di @Sogger da ricordare è se la class ricevente è com.myOtherApp.receiver.OtherAppActivity e il pacchetto menzionato in AndroidManifest è com.myOtherApp il tuo codice sarà

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

    A partire da API23, è ansible utilizzare il metodo ComponentName.createRelative (String pkg, String cls) e fare:

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

    In questo modo è ansible creare un object ComponentName utilizzando un path di class relativo. Tenga presente il punto all'inizio del path di class. È necessario indicare che il metodo dovrebbe trattare il secondo argomento come path relativo. Proprio come @Sogger ha menzionato, il constructor ComponentName limita il parametro di class come un path assoluto.

    Notare inoltre che in questo modo si utilizzano intenzioni esplicite e non è necessario inserire altri filtri di intenti aggiuntivi per l'attività di destinazione.

    Crea l'intento come action.Main e aggiungi la categoria launcher :

     Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.