簡體   English   中英

package android 11 kotlin 中的可見性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM