【问题标题】:Suppressing Google Maps Intent Selection Dialog禁止谷歌地图意图选择对话框
【发布时间】:2011-07-03 00:25:34
【问题描述】:

当我使用这段代码时

   string url = "somegooglemapsurl.com";
   Intent mapLauncherIntent = new Intent(android.content.Intent.ACTION_VIEW,  Uri.parse(url));
   startActivity(mapLauncherIntent);

会弹出一个选择对话框,询问我是否要在地图应用程序或浏览器中打开此地图。我希望从我的应用程序活动到 Google 地图的过渡是无缝的。如何抑制此对话框并告诉 android 在地图活动中打开地图?

编辑:当我进入谷歌地图时,我想在某个位置使用公共蒸腾打开一个方向提示。我可以通过 google maps url 做到这一点,但是 url 会弹出选择对话框。

【问题讨论】:

    标签: android dialog maps


    【解决方案1】:

    我还没有找到完美的解决方案,但这至少会打开预先选择正确目的地和公共交通的地图。然后用户所要做的就是点击方向按钮。

    它还会检查是否安装了谷歌地图,如果安装了,则更喜欢使用它。

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

    【讨论】:

    【解决方案2】:

    以下是我目前发现的不同方法:

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

    【讨论】:

    • 我希望已经为用户选择了合适的交通方式。
    【解决方案3】:

    首先,我要指出的是,去掉那个选择对话框并不一定是件好事。您希望在如何处理数据方面给用户尽可能多的选择,这是 Android 生态系统之美的一部分。也就是说,在不了解您的应用程序的情况下进行判断是不公平的,所以...

    您可以使用geo 协议:

    http://developer.android.com/guide/appendix/g-app-intents.html

    不要传递maps.google.com/blablabla之类的东西,而是像geo:0,0?q=my+street+address那样格式化你的URI。

    例子:

    Intent mapLauncherIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=1111+imaginary+dr"));
    

    【讨论】:

    • 我看过了,但我只需要使用公共交通加载谷歌地图方向。我知道你可以通过 google maps url 做到这一点,但你能通过 geo 做到这一点吗?
    • 完整规格在这里:tools.ietf.org/html/draft-mayrhofer-geo-uri-00 我不确定,但我对此表示怀疑。我有另一个想法,我会研究一下。
    • 对不起,我现在没有更多的时间看它。我相信如果您知道地图活动的名称,您可以使用以下命令启动它:developer.android.com/reference/android/content/…, java.lang.String) com.google.android.maps 是包名称,但我不确定活动名称。然后是弄清楚如何添加正确的附加功能的问题。不知道该怎么做。
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多