如何让用户从两种不同的意图中进行选择?

时间:2011-04-04 17:59:17

标签: android

我有两个意图,我希望用户可以选择。一个目的是通过谷歌地图推动方向,另一个是通过谷歌导航(测试版)。这就是我设置每个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(),但我不确定如何使用特定意图来实现它。我之前用过这样的电子邮件就是这样的:

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

此处设置了emailIntent

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

提前谢谢!!!!

2 个答案:

答案 0 :(得分:4)

您可以自定义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);
    }
}

你可以这样跑: 分享(“邮件”,“/ sdcard/dcim/Camera/photo.jpg”);

在你的情况下,只需添加到targetedShareIntents你的2 Intents。

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

答案 1 :(得分:1)

你必须手动完成。 createChooser会打开一个对话框,其中包含可以处理一个特定意图的应用列表。另一方面,你有两个不同的意图......所以只需创建一个包含两个选项的对话框。看看this example