Android: запуск активности для другого стороннего приложения
Я работаю над приложением и хочу интегрировать в него приложение 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? Вот копия Last.fmManifest.xml на Last.fm для справки.
Спасибо за чтение, Тони
1 ответ
Да, это возможно, но вам нужно знать правильное имя компонента. Регулярно запускайте приложение 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);