2010-08-19 28 views
7

Estoy trabajando en una aplicación y quiero integrar la aplicación Last.fm en ella. Básicamente, cuando alguien está mirando a un artista en mi aplicación, me gustaría tener un botón que puedan tocar para abrir la aplicación Last.fm con la información del artista.Android: Iniciar una actividad para una aplicación de terceros diferente

esta intención obras, sino que carga un menú preguntando qué aplicación me gustaría utilizar (Navegador o Last.fm):

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

Sin embargo, sólo quiero iniciar la aplicación y vaya Last.fm pedirlo diálogo de la aplicación que se utilice, pensé que tal vez utilizando el método setPackage() sería el siguiente:

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

Pero hace que el cierre de la aplicación:

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

¿Es posible simplemente iniciar la aplicación Last.fm? Here's una copia de AndroidManifest.xml de Last.fm como referencia.

Gracias por leer, , Tony

Respuesta

13

Sí, es posible, pero lo que necesita saber el nombre del componente correcto. Inicie la aplicación last.fm con regularidad y verifique el archivo de registro de la información cmp = ... que se utilizó cuando se inició la aplicación. Use esto también en su aplicación entonces.

que iniciar la aplicación Z-DeviceTest del mercado de dentro de mi aplicación sin un problema como este:

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

en mi caso, la información que tomé de la Logcat era:

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

// cmp = zausan.zdevicetest/.zdevicetest

con el fin de saber cómo iniciar la aplicación con el derecho de componente/clase ... hacer lo mismo para la aplicación last.fm

Editar: He probado a poner en marcha Last.fm de mi propia aplicación, y esto funciona bien sin ningún error:

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

Esto es un truco y no se considera la forma correcta de llamar a las aplicaciones. Esta es una forma segura de asegurarse de que se muestren todos los tipos de errores – Falmarri

+0

¿Puede explicar por qué esto es un truco? ¿está utilizando el Intento regular de la aplicación que también ha llamado el Iniciador de aplicaciones, es decir, cuando hace clic en el icono de la aplicación en la pantalla de inicio? De todos modos, ¿cuál es la forma correcta de sugerir en su lugar? –

+0

Tal vez lo malentendí. Si llamas a la actividad que llama el iniciador, entonces creo que debería estar bien. Entendí la pregunta como llamar a una actividad interna de un paquete diferente. Esto es propenso a romperse porque esa actividad podría requerir extras de intención que podrían causar un bloqueo, o algo así. Sin ver el código, no es posible saber si es 100% seguro – Falmarri

Cuestiones relacionadas