[英]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.