[英]package visibility in android 11 kotlin
我想找到安裝在設備上的 email 客戶端並在該應用程序上重定向 email id 以發送 email 消息。 它在android 10上的工作正常工作,但在ZC31B32364CE19CA8FCD150A417ECCE58B 中不起作用。 我不明白如何在 android 11 中實現這個代碼功能
request?.url.toString().startsWith("mailto:") -> {
val intent = Intent(Intent.ACTION_SENDTO)
intent.type = "message/rfc822"
intent.data = Uri.parse(request?.url.toString())
view?.context?.packageManager?.let { packageManager ->
if (packageManager.resolveActivity(intent, 0) != null) {
view.context?.startActivity(intent)
} else {
Log.E("Error to find ", "Email client")
}
}
}
它在低於android 10的情況下啟動 email 客戶端,但在ZC31B323614CE19CA8FCD15CE5A中找不到 email 客戶端。 它總是顯示Error to find Email client 。 有人可以更詳細地解釋我如何在 Android 11 上進行 Package 可見性過濾工作,有人可以分享一些代碼如何實現這一點。
由於您的應用程序以 Android 11 或更高版本為目標,並且需要與自動可見的應用程序以外的應用程序進行交互,因此請在應用程序的清單文件中添加查詢元素。 在元素中,通過 package 名稱、意圖簽名或提供者權限指定其他應用程序。
要查看其他包,請使用該元素聲明您的應用需要增加 package 可見性。
<manifest...>
<queries>
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
<application>
</application>
</manifest>
如果您的應用可能需要查詢或與設備上所有已安裝的應用交互(這種情況很少見),您可以選擇 Android 11 中引入的QUERY_ALL_PACKAGES權限。
如果 resolveActivity() 返回 null 然后嘗試使用queryIntentActivities()
更多信息請參考: https://developer.android.com/training/package-visibility/declaring
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.