Получите список приложений, способных обрабатывать намерение SEND для отображения в представлении (а не всплывающем диалоговом окне)

Я пытаюсь получить список всех приложений, установленных на телефоне, способных обрабатывать намерение SEND. В настоящее время я занимаюсь этой ситуацией, используя Intent.createChooser, но этого я не пытаюсь достичь, поскольку я хотел бы получить доступ к списку приложений, чтобы отображать их в представлении в моей деятельности, аналогичным как приложение Android Stock Gallery отображает их, а НЕ в диалоговом окне spinner.

Снимок экрана доступен здесь: http://i.stack.imgur.com/0dQmo.jpg

Любая помощь будет принята с благодарностью.

Ответ 1

Вызвать queryIntentActivities() на PackageManager, учитывая ACTION_SEND Intent, настроенный так же, как вы бы использовали с createChooser() (т.е. имеет тип MIME, Uri и т.д.). Это даст вам список всех совпадений, которые появятся в выборе. Затем вы можете использовать выбор пользователя для запуска фактической активности.

Вот пример проекта, который использует это для создания стартовой панели запуска.

Ответ 2

List<String> packages = new ArrayList<>();

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "test");
sendIntent.setType("text/plain");
List<ResolveInfo> resolveInfoList = getPackageManager()
    .queryIntentActivities(sendIntent, 0);

for (ResolveInfo resolveInfo : resolveInfoList) {
    packages.add(resolveInfo.activityInfo.packageName);
}