android - 如何让用户从两个不同的 Intent 中进行选择?

标签 android

我有两个 Intent 供用户选择。一个 Intent 是通过谷歌地图获取行车路线,另一个是通过谷歌导航(测试版)。这是我设置每个 Intent 的方式:

 //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() 但我不确定如何用特定的 Intent 来实现它。我以前用过这样的电子邮件:

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

这里设置了emailIntent:

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

提前致谢!!!

最佳答案

您可以自定义您的 Intent.createChooser 以仅显示您想要的 Itents。

诀窍是将 EXTRA_INITIAL_INTENTS 添加到从 createChoose 生成的默认列表,并从列表中删除其他 Intents。

看看这个示例,我在其中创建了一个仅显示我的电子邮件应用程序的选择器。在我的例子中出现了三个邮件:Gmail、YahooMail 和默认邮件。

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("邮件", "/sdcard/dcim/Camera/photo.jpg");

在您的情况下,只需将您的 2 个 Intents 添加到 targetedShareIntents。

这是基于帖子:Custom filtering of intent chooser based on installed Android package name

关于android - 如何让用户从两个不同的 Intent 中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5542388/

相关文章:

java - Android 点击并按住删除项目

java - 传递 3 个元素( Intent )

android - Kakao Talk 是如何运作的?

java - google api 错误 - 无法让 google 登录正常工作

java - 如何实现更新服务在后台运行?

android - 获取android中回调的变量 “outside”的值

android - Adapter getView() 在每个位置之前两次请求位置 0。为什么?

android - 如何在应用程序运行时获取 Android 日志消息?

android - viewpager 内的 youtube api [android]

android - 如何使用 MediaCodec 将位图编码为视频?