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

Android 如何让用户从两种不同的意图中进行选择?,android,Android,我有两个意图,我想让用户从中选择。一个目的是通过谷歌地图提供驾驶方向,另一个目的是通过谷歌导航(测试版)。以下是我设置每个意图的方式: //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 I

我有两个意图,我想让用户从中选择。一个目的是通过谷歌地图提供驾驶方向,另一个目的是通过谷歌导航(测试版)。以下是我设置每个意图的方式:

 //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);

提前谢谢你

您必须手动操作
createChooser
打开一个对话框,其中包含可以处理一个特定意图的应用列表。另一方面,你有两个不同的意图。。。因此,只需创建一个带有两个选项的对话框。看一看。

你必须手动操作
createChooser
打开一个对话框,其中包含可以处理一个特定意图的应用列表。另一方面,你有两个不同的意图。。。因此,只需创建一个带有两个选项的对话框。查看。

您可以自定义Intent.createChooser以仅显示所需的Itents

诀窍是将额外的\u初始\u意图添加到从createChoose生成的默认列表中,并从列表中删除其他意图

看看这个示例,我在其中创建了一个仅显示我的电子邮件应用程序的选择器。在我的例子中,出现了三封邮件: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);
    }
}
private void共享(字符串nameApp,字符串imagePath){
List targetedShareContents=new ArrayList();
意向共享=新意向(android.content.Intent.ACTION\u SEND);
share.setType(“图像/jpeg”);
List resInfo=getPackageManager().queryInputActivities(共享,0);
如果(!resInfo.isEmpty()){
对于(ResolveInfo:resInfo){
Intent targetedShare=新意图(android.content.Intent.ACTION\u SEND);
targetedShare.setType(“image/jpeg”);//在这里输入mime类型
if(info.activityInfo.packageName.toLowerCase().contains(nameApp)|
info.activityInfo.name.toLowerCase().contains(nameApp)){
targetedShare.putExtra(Intent.EXTRA_主题,“我的电子邮件我的主题”);
targetedShare.putExtra(Intent.EXTRA_文本,“我的帖子/电子邮件正文”);
targetedShare.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(新文件(imagePath));
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareContents.add(targetedShare);
}
}
Intent chooserecontent=Intent.createChooser(targetedShareContents.remove(0),“选择要共享的应用程序”);
选择content.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetedShareContents.toArray(新包裹[]{}));
开始触觉(选择内容);
}
}
你可以这样跑: 分享(“邮件”,“sdcard/dcim/Camera/photo.jpg”)

在您的情况下,只需将您的两个意图添加到targetedShareContent即可


这是基于post:

您可以自定义Intent.createChooser以仅显示所需的Itents

诀窍是将额外的\u初始\u意图添加到从createChoose生成的默认列表中,并从列表中删除其他意图

看看这个示例,我在其中创建了一个仅显示我的电子邮件应用程序的选择器。在我的例子中,出现了三封邮件: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);
    }
}
private void共享(字符串nameApp,字符串imagePath){
List targetedShareContents=new ArrayList();
意向共享=新意向(android.content.Intent.ACTION\u SEND);
share.setType(“图像/jpeg”);
List resInfo=getPackageManager().queryInputActivities(共享,0);
如果(!resInfo.isEmpty()){
对于(ResolveInfo:resInfo){
Intent targetedShare=新意图(android.content.Intent.ACTION\u SEND);
targetedShare.setType(“image/jpeg”);//在这里输入mime类型
if(info.activityInfo.packageName.toLowerCase().contains(nameApp)|
info.activityInfo.name.toLowerCase().contains(nameApp)){
targetedShare.putExtra(Intent.EXTRA_主题,“我的电子邮件我的主题”);
targetedShare.putExtra(Intent.EXTRA_文本,“我的帖子/电子邮件正文”);
targetedShare.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(新文件(imagePath));
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareContents.add(targetedShare);
}
}
Intent chooserecontent=Intent.createChooser(targetedShareContents.remove(0),“选择要共享的应用程序”);
选择content.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetedShareContents.toArray(新包裹[]{}));
开始触觉(选择内容);
}
}
你可以这样跑: 分享(“邮件”,“sdcard/dcim/Camera/photo.jpg”)

在您的情况下,只需将您的两个意图添加到targetedShareContent即可

这是基于以下内容: