首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android 11 kotlin中的包可见性

android 11 kotlin中的包可见性
EN

Stack Overflow用户
提问于 2021-05-13 16:45:54
回答 1查看 4.3K关注 0票数 4

我希望找到安装在设备上的电子邮件客户端,并在该应用程序上重定向电子邮件id以发送电子邮件消息。它在下面的android 10上运行得很好,但在Android11中却不起作用。我找到了关于Android 11上的包可见性筛选的文章。我不知道如何在android 11中实现这个代码功能

代码语言:javascript
运行
复制
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")
        }
     }
}

它在低于安卓10的情况下启动电子邮件客户端,但无法在android 11中找到电子邮件客户端。它总是显示错误来查找电子邮件客户端。有人能更详细地解释一下包可视性过滤在Android11上是如何工作的吗?有人可以分享一些代码来实现这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-13 18:02:23

当您的应用程序以Android11或更高版本为目标,并且需要与那些自动可见的应用程序进行交互时,请在应用程序的清单文件中添加查询元素。在元素中,通过包名、意图签名或提供者权限指定其他应用程序。

要查看其他包,请使用元素声明应用程序需要增加包的可见性。

代码语言:javascript
运行
复制
<manifest...>
     <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    <application>
    </application>
</manifest>

如果您的应用程序可能需要查询或与设备上所有安装的应用程序交互(这是很少见的),那么您可以选择在Android11中引入的QUERY_ALL_PACKAGES权限。

如果resolveActivity()返回null,那么尝试使用queryIntentActivities()

欲了解更多信息,请参阅:https://developer.android.com/training/package-visibility/declaring

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67523038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档