当我使用此代码时
string url = "somegooglemapsurl.com";
Intent mapLauncherIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(url));
startActivity(mapLauncherIntent);
弹出一个选择对话框,询问我是否要在地图应用程序或浏览器中打开此地图。我希望从应用程序活动到Google地图的过渡是无缝的。如何禁止此对话框并告诉android在地图活动中打开地图?
编辑:当我进入Google地图时,我想在某个位置使用公共蒸腾来打开路线提示。我可以通过谷歌地图网址进行此操作,但是网址会显示选择对话框。答案 0 :(得分:17)
我还没有找到一个完美的解决方案,但这至少会打开预先选定正确目的地和公共交通的地图。然后,用户只需点击指示按钮即可。
它还检查是否安装了谷歌地图,如果是这样的话,则更喜欢使用谷歌地图。
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?daddr=0,0%20(Imaginary%20Place)&dirflg=r"));
if (isAppInstalled("com.google.android.apps.maps")) {
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
}
startActivity(intent);
// helper function to check if Maps is installed
private boolean isAppInstalled(String uri) {
PackageManager pm = getApplicationContext().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;
}
答案 1 :(得分:6)
以下是我目前发现的不同方法:
<强> 1。直接启动导航:
此明确意图将直接启动Google导航:
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。从谷歌地图开始:
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;
}
答案 2 :(得分:0)
首先,我要指出,摆脱选择对话框并不一定是好事。您希望为用户提供尽可能多的处理数据的选择,这是Android生态系统之美的一部分。也就是说,如果不理解你的申请,判断是不公平的,所以......
您可以使用geo
协议:
http://developer.android.com/guide/appendix/g-app-intents.html
而不是传递像maps.google.com/blablabla
这样的内容来格式化您的URI geo:0,0?q=my+street+address
。
示例:
Intent mapLauncherIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=1111+imaginary+dr"));