[英]android intent to open google maps in android 11 not working
android意圖在android 11中打開谷歌地圖不再工作,但在較低的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 package="com.example.game">
<queries>
<package android:name="com.google.android.apps.maps" />
</queries>
...
</manifest>
如果您的應用面向 Android 11 或更高版本,並且需要與非自動可見的應用交互,請在應用的清單文件中添加該元素。 在元素內,通過包名、意圖簽名或提供者權限指定其他應用程序
更多細節在這里聲明包可見性需求
您的問題在於代碼行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>
更多信息:
如果你想從一個網址打開谷歌地圖(例如https://www.google.com/maps/dir/?api=1&dir_action=navigate&origin=${origin.latitude},${origin.longitude}&destination=${目的地.緯度},${目的地.經度} )
你必須在 Android Manifest 中添加下一個權限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
然后查詢標簽:
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.