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>
更多信息:
将此添加到您的清单
<manifest package="com.example.game">
<queries>
<package android:name="com.google.android.apps.maps" />
</queries>
...
</manifest>
如果您的应用面向 Android11 或更高版本并且需要与自动可见的应用以外的应用进行交互,请在应用的清单文件中添加该元素。在该元素中,按包名称、意图签名或提供者权限指定其他应用程序
此处有更多详细信息Declaring package visibility needs
打开 Google 地图
您必须添加查询标签:
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
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>
更多信息:
将此添加到您的清单
<manifest package="com.example.game">
<queries>
<package android:name="com.google.android.apps.maps" />
</queries>
...
</manifest>
如果您的应用面向 Android11 或更高版本并且需要与自动可见的应用以外的应用进行交互,请在应用的清单文件中添加该元素。在该元素中,按包名称、意图签名或提供者权限指定其他应用程序
此处有更多详细信息Declaring package visibility needs
您必须添加查询标签:
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>