2012-01-24 1 views
0

Я бы хотел запустить приложение по умолчанию: браузер, контактную книгу, телефон, электронную почту, музыкальное приложение и т. Д. Я нашел много q/a, например, браузер, открывающий определенный URL-адрес или blank, и here ответ даже «Нет не возможно». Но я хотел бы просто открыть/запустить его, не сообщая ему, чтобы он перешел на конкретный URL-адрес или отправил письмо кому-то и т. Д.Android: запуск приложения по умолчанию или одного из них может отличаться на разных устройствах

Однако я также видел некоторые домашние приложения, в которых это работает (по крайней мере, для некоторые приложения). На устройстве моего коллеги есть, например, другая контактная книга (без Google), которая обнаружена и открыта правильно.

Я видел в документации по Android некоторые категории намерений, которые указывают на эти проблемы, но это только> = API.11. Поэтому я не могу использовать/тестировать их на своем устройстве.

Вопрос: Невозможно ли запустить приложение по умолчанию (с выбором приложения, конечно, нормально) без предоставления дополнительных данных? Если нет, как вы думаете, что делать с этими домашними приложениями (возможно, обходные пути как-то возможны).

PS: для телефона приложение, я думаю, у меня есть обходной путь с использованием Intent.ACTION_DIAL без какой-либо другой информации, которая откроет просто дозвонщик.

ОБНОВЛЕНИЕ: Я изменил название. Некоторые приложения, такие как адресная книга, могут быть не одинаковыми на разных устройствах. Поэтому в этом случае я хотел бы запустить приложение адресной книги, в зависимости от того, что это.

ответ

0

Вы можете запускать приложения функцией «startActivity», если вы знаете о каноническом имени приложения как «android.com.browser». Сделайте это просто, ища AndroidManifest.xml в исходном коде приложения (посмотрите на Codeaurora.com или в github/Cyanogenmod) и возьмите нужное имя приложения. После вы знаете об имени App («Действия») реализовать код следующим образом:

Intent intent = new Intent(); 
intent.setClassName(this, "com.android.browser"); 
intent.setCategory(Intent.ACTION_MAIN); 
startActivity(intent); 

это только пример, иногда вы должны поставить цель дополнения или значение данных, эта информация может быть найдена в appand AndroidManifest.xml тоже.

+0

Спасибо. Как только я узнаю название класса или пакета, я знаю, как его запустить. Но я хотел бы открыть браузер по умолчанию (или другое приложение), заданный пользователем (например, Opera или Dolphin), и в случае, если он не установлен, откройте диалог выбора. Однако, если есть метод получения приложения по умолчанию (в случае его установки) для определенной категории (просмотр, электронная почта и т. Д.), Это также может быть полезно. –

1

Этот ответ не является ответом на 100%, но некоторые обходные пути для некоторых типичных приложений.

Тем не менее открыты являются: музыкальный плеер, адресная книга

Browser: Я получаю список приложений, которые обрабатывают «HTTP» -DATA намерения, а потом я смотрю, если он доступен в списке предпочтительных приложений ,

Intent appFilter = new Intent(Intent.ACTION_VIEW); 
appFilter.setData(Uri.parse("http://www.google.com")); 
List<ResolveInfo> browserInfoList = pm.queryIntentActivities(appFilter, 0); 

List<IntentFilter> outFilters = new ArrayList<IntentFilter>(); 
List<ComponentName> outActivities = new ArrayList<ComponentName>(); 
pm.getPreferredActivities(outFilters, outActivities, null); 
if(outActivities.size() > 0) { 
    for(ComponentName cn : outActivities) { 
    String cnClass = cn.getClassName(); 
    String cnPkg = cn.getPackageName(); 
    for (ResolveInfo info : browserInfoList) { 
     if(info.activityInfo.name.equals(cnClass) && 
     info.activityInfo.packageName.equals(cnPkg)) { 
     return cn; 
     } 
    } 
    } 
} 

В случае по умолчанию не найден, я открываю диалог выбора браузера см here.

Телефон: как описано в вопросе:

Intent intent = new Intent(Intent.ACTION_DIAL); 
startActivity(intent); 
Смежные вопросы