android 打算在 android 11 中打开 google 地图无效

android intent to open google maps in android 11 not working

android 打算在 android 11 中打开 Google 地图不再工作但在较低的 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 工作室显示此建议:

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

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

Consider adding a declaration to your manifest when calling this method; see https://g.co/dev/packagevisibility for details

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

Note: If your app targets Android 11 (API level 30) or higher, the methods in this class each return a filtered list of apps. Learn more about how to manage package visibility.

那是什么意思呢?

在 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

将此添加到您的清单

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

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

</manifest>

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

此处有更多详细信息Declaring package visibility needs

如果您想从 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>