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);
Другие вопросы по тегам