我尝试从我的应用程序中调用导航。
我打电话给这个查询:
String link = "geo:" + posInfo.getLatitude() + "," + posInfo.getLongitude();
Intent navigateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(link));
Intent chooser = Intent.createChooser(navigateIntent, ctx.getString(R.string.navigate_intent_chooser_title));
ctx.startActivity(chooser);
意图选择器显示2个应用:GoogleMaps和Waze。
使用Waze的导航功能完美,但使用Google地图无法正常工作。我显示地图但没有导航说明。 如果我直接使用GoogleMaps,那么我可以导航,这与意图参数的传递方式有关。
我在其他一些答案中读到了我需要使用谷歌地图的另一个查询:
"google.navigation:q.."
我有两个问题:
答案 0 :(得分:5)
这是我的解决方案:
private static final String PERFIX_DEFAULT_NAVIGATE_LINK_BY_COORDINATES = "geo:";
private static final String PERFIX_DEFAULT_NAVIGATE_LINK_BY_ADDRESS = "geo:0,0?q=";
private static final String PERFIX_DEFAULT_GOOGLE_NAVIGATE = "google.navigation:q=";
private static Intent getChooserNavigateIntent(Context context, Intent navigateIntent, POSEntityInfo posInfo, boolean isCoordinates) {
// Check if there is a default app opener for this type of content.
final PackageManager packageManager = context.getPackageManager();
ResolveInfo defaultAppInfo = packageManager.resolveActivity(navigateIntent,
PackageManager.MATCH_DEFAULT_ONLY);
// create the intent for intent chooser
List<Intent> targetedOpenIntents = new ArrayList<Intent>();
List<ResolveInfo> appInfoList = packageManager.queryIntentActivities(navigateIntent,
PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo appInfo : appInfoList) {
String packageName = appInfo.activityInfo.packageName;
Intent targetedOpenIntent = new Intent(android.content.Intent.ACTION_VIEW).setPackage(packageName);
targetedOpenIntent = getNavigateIntent(appInfo, targetedOpenIntent, isCoordinates, posInfo);
targetedOpenIntents.add(targetedOpenIntent);
}
// create the intent chooser. delete the first member in the list(the default activity)
Intent chooserIntent = Intent.createChooser(targetedOpenIntents.remove(0),
context.getString(R.string.navigate_intent_chooser_title)).putExtra(Intent.EXTRA_INITIAL_INTENTS,
targetedOpenIntents.toArray(new Parcelable[]{}));
return chooserIntent;
}
private static Intent getNavigateIntent(ResolveInfo appInfo, Intent navigateIntent, boolean isCoordinates, POSEntityInfo posInfo) {
// link urls
final String GOOGLE_NAVIGATE_PACKAGE = "com.google.android.apps.maps";
String suffixAddressLink = posInfo.getStreet() + " " + posInfo.getStreetNum() + "," + posInfo.getCity();
String suffixCoordinatesLink = posInfo.getLatitude() + "," + posInfo.getLongitude();
boolean isGoogleMaps = GOOGLE_NAVIGATE_PACKAGE.equals(appInfo.activityInfo.packageName);
//build the link url
StringBuilder link = new StringBuilder();
link.append(isCoordinates ? (isGoogleMaps ? PERFIX_DEFAULT_GOOGLE_NAVIGATE : PERFIX_DEFAULT_NAVIGATE_LINK_BY_COORDINATES) : (isGoogleMaps ? PERFIX_DEFAULT_GOOGLE_NAVIGATE : PERFIX_DEFAULT_NAVIGATE_LINK_BY_ADDRESS));
link.append(isCoordinates ? suffixCoordinatesLink : suffixAddressLink);
Log.d(TAG, "Link = " + link);
return navigateIntent.setData(Uri.parse(link.toString()));
}
//只需使用&gt;关闭代码