@baddev

Как правильнее проверять наличие приложения, которое сможет обработать intent?

В документации показана сначала такая проверка наличия приложения для обработки интента:

Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;

// Start an activity if it's safe
if (isIntentSafe) {
    startActivity(mapIntent);
}


и чуть ниже другой способ:

Intent intent = new Intent(Intent.ACTION_SEND);
...

// Always use string resources for UI text.
// This says something like "Share this photo with"
String title = getResources().getString(R.string.chooser_title);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, title);

// Verify the intent will resolve to at least one activity
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(chooser);
}


Подскажите пожалуйста, в чем отличие и какой использовать предпочтительнее?

resolveActivity выглядит как-то более правильно, однако не понимаю тогда в каких случаях использовать первый способ. Заранее всем спасибо
  • Вопрос задан
  • 360 просмотров
Решения вопроса 1
ookami_kb
@ookami_kb
Разница будет в том случае, когда этот интент могут обработать разные приложения.

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

Какой способ выбрать - зависит от бизнес-логики этого метода. Например, если кнопка нужная для отправки письма, первый способ предпочтительнее (поскольку обычно пользователь все время пользуется каким-то одним почтовым клиентом); если же это кнопка Share - то логичнее предлагать пользователю каждый раз выбрать, как именно он хочет поделиться контентом.

Если нужно только проверить, что приложение существует, то разницы никакой нет (но второй способ мне кажется чуть нагляднее и проще для восприятия). Вся разница между ними будет в том, что один вернет *все* подходящие приложения, а другой - одно (самое подходящее), если оно существует.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы