Как я могу позволить Пользователю выбирать из двух разных Интентов?

1

У меня есть два намерения, которые я бы хотел, чтобы пользователи выбрали. Один из способов - проложить маршрут через Карты Google, а другой - через Google Navigation (бета-версия). Вот как я настраивал каждое намерение:

 //regular maps
 Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
                   Uri.parse("geo:0,0?q=40.7143528,-74.0059731"));
//navigation
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
           Uri.parse("google.navigation:40.7143528,-74.0059731"));

Я думаю, что мне нужно использовать Intent.createChooser(), но я не уверен, как его реализовать с конкретными намерениями. Я использовал его раньше, используя электронную почту:

startActivity(Intent.createChooser(emailIntent, "Send your email in:")); 

здесь emailIntent:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

Заранее благодарю!!!!

Теги:

2 ответа

1
Лучший ответ

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

4

Вы можете настроить свой Intent.createChooser для отображения только тех иттенов, которые вы хотите.

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

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

private void share(String nameApp, String imagePath) {
    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    Intent share = new Intent(android.content.Intent.ACTION_SEND);
    share.setType("image/jpeg");
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0);
    if (!resInfo.isEmpty()){
        for (ResolveInfo info : resInfo) {
            Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);
            targetedShare.setType("image/jpeg"); // put here your mime type

            if (info.activityInfo.packageName.toLowerCase().contains(nameApp) || 
                    info.activityInfo.name.toLowerCase().contains(nameApp)) {
                targetedShare.putExtra(Intent.EXTRA_SUBJECT,  "My e-mail my-subject");
                targetedShare.putExtra(Intent.EXTRA_TEXT,     "My body of post/email");
                targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath)) );
                targetedShare.setPackage(info.activityInfo.packageName);
                targetedShareIntents.add(targetedShare);
            }
        }

        Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
        startActivity(chooserIntent);
    }
}

Вы можете запускать так: share ( "mail", "/sdcard/dcim/Camera/photo.jpg" );

В вашем случае просто добавьте к targetShareIntents свои 2 намерения.

Это было основано на сообщении: Пользовательская фильтрация выбора намерений на основе установленного имени пакета Android

Ещё вопросы

Сообщество Overcoder
Наверх
Меню