以下是我目前发现的不同方法:
1.直接启动导航:
这个显式意图会直接启动谷歌导航:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=my+street+address");
startActivity(intent);
这将直接启动导航(遗憾的是没有让用户选择交通工具)
.
2。让用户选择交通工具:
这将启动 Google 导航应用,但让用户在开始导航之前选择交通工具:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps/?daddr=my+street+address");
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
。
3.从 Google 地图开始:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=my+street+address");
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
这将启动地图,用户可以从那里开始导航(并选择交通模式)。
在所有情况下,您都应该使用 PackageManager 和 queryIntentActivities() 或异常处理来处理用户未安装 Google 地图/导航的情况。
在我的应用程序中,我使用方法 2,效果很好。希望这会有所帮助。
插件:这是一种检查应用程序是否已安装的方法。在调用 intent.setClassName() 之前,我使用它来检查是否安装了“com.google.android.apps.maps”。
public static boolean isAppInstalled(String uri) {
PackageManager pm = getContext().getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
} catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed;
}