Android:为不同的第三方应用程序启动活动

时间:2010-08-19 03:00:55

标签: android android-intent

我正在开发一款应用,我希望将Last.fm应用集成到其中。基本上,当有人在我的应用程序中查看艺术家时,我想要一个按钮,他们可以点击以打开Last.fm应用程序和艺术家的信息。

此意图有效,但它会加载一个菜单,询问我想要使用哪个应用(Browser或Last.fm):

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

但是,我只是想启动Last.fm应用程序并跳过询问使用哪个应用程序的对话框,我想可能使用setPackage()方法会像这样工作:

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

但它会导致应用程序崩溃:

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

是否可以启动Last.fm应用程序? Here's Last.fm的AndroidManifest.xml副本供参考。

感谢阅读, 贝

1 个答案:

答案 0 :(得分:14)

是的,这是可能的,但您需要知道正确的组件名称。定期启动last.fm应用程序并检查日志文件以获取启动应用程序时使用的cmp = ...信息。然后在你的应用程序中使用它。

我从我的应用程序中启动市场上的Z-DeviceTest应用程序,没有这样的问题:

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

就我而言,我从logcat获取的信息是:

  

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

     

// cmp = zausan.zdevicetest / .zdevicetest

为了知道如何使用正确的组件/类启动应用程序...对last.fm应用程序执行相同的操作

编辑: 我已经测试过从我自己的应用中启动Last.fm,这样可以正常运行,没有任何错误:

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