android意图在android 11中打开谷歌地图不起作用

Zeo*_*ine 9 maps android

android意图在android 11中打开Goog​​le地图不再工作但可以在较低的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();

                }
Run Code Online (Sandbox Code Playgroud)

Android studio 显示了这个建议:

调用此方法时,请考虑在清单中添加声明;有关详细信息,请参阅https://g.co/dev/packagevisibility

Rid*_*zag 16

将其添加到您的清单中

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

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

</manifest>
Run Code Online (Sandbox Code Playgroud)

如果您的应用面向 Android 11 或更高版本,并且需要与自动可见的应用程序以外的应用程序进行交互,请在应用程序的清单文件中添加该元素。在该元素中,通过包名称、意图签名或提供商权限指定其他应用程序

更多详细信息请参见此处 声明包可见性需求


Dươ*_*inh 5

你的问题出在代码行上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>
Run Code Online (Sandbox Code Playgroud)

更多信息:

  1. Android 11 中的包可见性
  2. Android 上的包可见性过滤