Android: запуск активности для другого стороннего приложения - PullRequest
7 голосов
/ 19 августа 2010

Я работаю над приложением и хочу интегрировать в него приложение Last.fm По сути, когда кто-то смотрит на исполнителя в моем приложении, я хотел бы иметь кнопку, которую они могут нажать, чтобы открыть приложение Last.fm с информацией об исполнителе.

Это намерение работает, но оно загружает меню с вопросом, какое приложение я хотел бы использовать (Браузер или 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? Вот копия файла AndroidManifest.xml на Last.fm для справки.

Спасибо за чтение, Tony

1 Ответ

14 голосов
/ 19 августа 2010

Да, это возможно, но вам нужно знать правильное имя компонента. Регулярно запускайте приложение 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

Edit: Я протестировал запуск Last.fm из моего собственного приложения, и все работает без ошибок:

final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");                
intentDeviceTest.setComponent(new ComponentName("fm.last.android","fm.last.android.LastFm"));
startActivity(intentDeviceTest);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...