【问题标题】:How to pass the parameters in custom intent chooser list?如何在自定义意图选择器列表中传递参数?
【发布时间】:2011-06-30 15:52:11
【问题描述】:

我已经为地图创建了自定义意图选择器(所有已安装在移动设备中的地图)。但是现在我无法通过它来传递纬度/经度。我的代码用于获取所有地图:

final String mapUri = "geo:"+lat+ "," + lon + "?q="+ address;
Intent mapIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mapUri));

final PackageManager packageManager = getPackageManager();      
final List<ResolveInfo> mapList = packageManager.queryIntentActivities(mapIntent, 0);

为了启动我正在使用的地图:

intentBuilder.setAdapter(adapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,int item) 
            {
                Intent i = null;

                try 
                {
                    i = pm.getLaunchIntentForPackage(mapList.get(item).activityInfo.packageName);//.getIntent(uri);
                    startActivity(i);
                } 
                catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                dialog.dismiss();
            }
       });
        AlertDialog alert = intentBuilder.create();
        alert.show();

这会打开地图,但没有任何位置。如何将 lat/lon 或 URI 传递给它?

【问题讨论】:

    标签: android map


    【解决方案1】:

    这里至少有一个问题:

    i = pm.getLaunchIntentForPackage(mapList.get(item).activityInfo.packageName);
    startActivity(i);
    

    getLaunchIntentForPackage() 所做的是为包名称中的相应活动构建一个 ACTION_MAIN 意图。因此,您正在启动的 Intent (a) 中没有您的 geo: URI,并且 (b) 甚至可能不会转到您在原始查询中找到的相同组件。

    当像这样使用 queryIntentActivities() 时,然后去启动您在列表中找到的活动之一,正确的做法通常是在 original Intent 上调用 Intent.setComponentName()将其交付给您想要的特定组件。

    您从 packageName 和要启动的 ActivityInfo 的名称构建 ComponentName。

    【讨论】:

    • 感谢您的快速回复,您能告诉我,如何在我的代码中使用 Intent.setComponentName()?提前致谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多