簡體   English   中英

如何在自定義意圖選擇器列表中傳遞參數?

[英]How to pass the parameters in custom intent chooser list?

我已經為地圖創建了自定義意圖選擇器(所有已安裝的移動地圖)。 但是現在我無法通過它來傳遞緯度/經度。 我的代碼用於獲取所有地圖:

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

為了啟動 map,我正在使用這個:

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

這將打開 map 但沒有任何位置。 如何將 lat/lon 或 URI 傳遞給它?

這里至少有一個問題:

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

getLaunchIntentForPackage() 所做的是為 package 名稱中的適當活動構建一個 ACTION_MAIN 意圖。 因此,您正在啟動的 Intent (a) 沒有您的 geo: URI,並且 (b) 甚至可能不會轉到您在原始查詢中找到的相同組件。

當像這樣使用 queryIntentActivities() 時,然后 go 並啟動您在列表中找到的活動之一,通常正確的做法是在原始Intent 上調用 Intent.setComponentName() 以將其交付給您想要的特定組件.

您從要啟動的 ActivityInfo 的 packageName 和名稱構建 ComponentName。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM