我希望找到安装在设备上的电子邮件客户端,并在该应用程序上重定向电子邮件id以发送电子邮件消息。它在下面的android 10上运行得很好,但在Android11中却不起作用。我找到了关于Android 11上的包可见性筛选的文章。我不知道如何在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")
}
}
}它在低于安卓10的情况下启动电子邮件客户端,但无法在android 11中找到电子邮件客户端。它总是显示错误来查找电子邮件客户端。有人能更详细地解释一下包可视性过滤在Android11上是如何工作的吗?有人可以分享一些代码来实现这一点吗?
发布于 2021-05-13 18:02:23
当您的应用程序以Android11或更高版本为目标,并且需要与那些自动可见的应用程序进行交互时,请在应用程序的清单文件中添加查询元素。在元素中,通过包名、意图签名或提供者权限指定其他应用程序。
要查看其他包,请使用元素声明应用程序需要增加包的可见性。
<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
https://stackoverflow.com/questions/67523038
复制相似问题