【问题标题】:android intent to open google maps in android 11 not workingandroid意图在android 11中打开谷歌地图不起作用
【发布时间】:2021-08-31 02:18:39
【问题描述】:

在 android 11 中打开谷歌地图的 android 意图不再工作,但可以在较低的 API 上工作

我们有这个功能

Intent mapIntent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + PICK_LATITUDE + "," + PICK_LONGITUDE ));
                mapIntent.setPackage("com.google.android.apps.maps");
                if (mapIntent.resolveActivity(getPackageManager()) != null) {
                    startActivity(mapIntent);
                }else{
                    Snackbar.make(root, "Google apps is not installed" , Snackbar.LENGTH_SHORT).show();

                }

Android Studio 显示了这个建议:

考虑在调用此方法时向您的清单添加声明;详情见https://g.co/dev/packagevisibility

【问题讨论】:

  • 你需要在manifest中添加查询
  • 对于其他在权限/清单上苦苦挣扎的人,可以通过 URL 启动地图。 See Google article

标签: android maps


【解决方案1】:

将此添加到您的清单中

<manifest package="com.example.game">

    <queries>
             <package android:name="com.google.android.apps.maps" />
    </queries>
    ...

</manifest>

如果您的应用以 Android 11 或更高版本为目标平台,并且需要与自动可见应用之外的应用交互,请在应用的清单文件中添加该元素。在元素中,按包名称、意图签名或提供者权限指定其他应用程序

更多详情在这里Declaring package visibility needs

【讨论】:

  • 如何在没有可以直接编辑的 &lt;manifest&gt; 的 Cordova/Ionic 项目中添加它?我的 config.xml 中有 元素,但在 元素中添加上述 元素对该文件无效
【解决方案2】:

您的问题在于代码intent.resolveActivity(getPackageManager()) 的行。当你调用resolveActivity时,你会得到这样的警告:

考虑在调用此方法时向您的清单添加声明;详情见https://g.co/dev/packagevisibility

查看PackageManager下的文档,你会看到这个注释:

注意:如果您的应用面向 Android 11(API 级别 30)或更高版本,则此类中的每个方法都会返回经过过滤的应用列表。详细了解如何管理包的可见性。

那是什么意思?

在 android 11 中,Google 添加了包可见性策略。应用程序现在可以更严格地控​​制查看其他应用程序。您的应用程序将无法查看或访问您的应用程序之外的应用程序。

你需要做什么?

您需要做的就是将下面的代码行添加到AndroidManifest.xml

<manifest>
    <queries>
        <!-- Specific intents you query for -->
        <package android:name="com.google.android.apps.maps" />
    </queries>
</manifest>

更多信息:

  1. Package visibility in Android 11
  2. Package visibility filtering on Android

【讨论】:

  • 感谢您的回答我在这里看到了这个答案stackoverflow.com/a/68659891/6561930,因为我在问我的问题之前进行了搜索,但是那个答案对我不起作用,所以我认为您的答案只是复制和粘贴,尝试了 Ridha 的答案,它确实有效,然后我看到你的新答案有正确的包,它也有效,谢谢
  • @Zeoneline 因为在那个问题的情况下,他们使用intent 打开而不是设置包。在您的情况下,您将商品发送到包裹 com.google.android.apps.maps,因此您需要将 intent 替换为 package
【解决方案3】:

如果您想从 url(例如https://www.google.com/maps/dir/?api=1&dir_action=navigate&origin=${origin.latitude},${origin.longitude}&destination=${destination.latitude},${destination.longitude})打开 Google 地图

你必须添加查询标签:

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data  android:scheme="https" />
    </intent>
</queries>

【讨论】:

  • 如果您指定QUERY_ALL_PACKAGES,那么您不必指定queries 标签。但如果您指定QUERY_ALL_PACKAGES,除非您满足某些特定排除条件,否则您的应用可能会被 Play 商店屏蔽
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多