2010-08-19 18 views
7

Sto lavorando su un'app e voglio integrare l'app di Last.fm in essa. Fondamentalmente, quando qualcuno guarda un artista nella mia app, mi piacerebbe avere un pulsante che possono toccare per aprire l'applicazione Last.fm con le informazioni dell'artista.Android: Avvio di un'attività per un'altra app di terze parti

questo funziona intenti, ma si carica un menù chiede quale app vorrei utilizzare (Browser o Last.fm):

Intent i = new Intent(); 
i.setData(Uri.parse("http://last.fm/music/" + headliner)); 
i.setAction("android.intent.action.VIEW"); 
startActivity(i); 

Tuttavia, voglio solo avviare l'applicazione Last.fm e saltare la finestra di dialogo che chiede quale app da utilizzare, ho pensato che forse con il metodo setPackage() dovrebbe funzionare in questo modo:

i.setPackage("fm.last.android"); 

ma provoca l'applicazione di crash:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http://last.fm/music/Rihanna pkg=fm.last.android } 

È possibile avviare l'app di Last.fm? Here's una copia di AndroidManifest.xml di Last.fm come riferimento.

Grazie per la lettura, Tony

risposta

13

Sì, è possibile, ma è necessario conoscere il nome del componente corretto. Avvia regolarmente l'app last.fm e controlla il file di log per le informazioni cmp = ... che sono state utilizzate all'avvio dell'app. Utilizzalo anche nella tua app.

ho avviare l'applicazione Z-DeviceTest dal mercato da dentro il mio app senza un problema come questo:

final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");     
intentDeviceTest.setComponent(new ComponentName("zausan.zdevicetest","zausan.zdevicetest.zdevicetest")); 
startActivity(intentDeviceTest); 

nel mio caso le informazioni che ho preso dalla logcat era:

// dat = contenuto: //applications/applications/zausan.zdevicetest/zausan.zdevicetest.zdevicetest

// CMP = zausan.zdevicetest/.zdevicetest

per sapere come avviare l'applicazione con il giusto componente/classe ... fare lo stesso per l'applicazione last.fm

Edit: Ho provato a lanciare Last.fm dal mio propria app, e questo funziona bene senza errori:

final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");     
intentDeviceTest.setComponent(new ComponentName("fm.last.android","fm.last.android.LastFm")); 
startActivity(intentDeviceTest); 
+0

Questo è un hack e non è considerato il modo corretto per chiamare le applicazioni. Questo è un modo sicuro per farti vedere tutti i tipi di errori. – Falmarri

+0

puoi spiegare perché questo è un trucco? stai utilizzando l'Intento regolare dell'app che è stato chiamato anche da Avvio applicazioni, ovvero quando fai clic sull'icona dell'app nella schermata iniziale? Ad ogni modo, quindi qual è il modo corretto di suggerire invece? –

+0

Forse ho frainteso. Se chiami l'attività che chiama il programma di avvio, suppongo che dovrebbe andare bene. Ho capito la domanda come chiamare un'attività INTERNA di un pacchetto diverso. Questo è soggetto a rotture perché quell'attività potrebbe richiedere degli extra di intenti che potrebbero causare un arresto anomalo o qualcosa del genere. Senza vedere il codice, non è possibile stabilire se è sicuro al 100% – Falmarri

Problemi correlati