Android: запуск приложения по умолчанию или приложения, которые могут отличаться на разных устройствах - PullRequest
0 голосов
/ 24 января 2012

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 26 января 2012

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

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

браузер : Iполучить список приложений, которые обрабатывают намерения «http» -данных, а затем я смотрю, если одно из них доступно в списке предпочтительных приложений.

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;
      }
    }
  }
}

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

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

Intent intent = new Intent(Intent.ACTION_DIAL);
startActivity(intent);
0 голосов
/ 24 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...