我的应用程序需要检查电子邮件应用程序是否存在,以便我们可以隐藏用于发送电子邮件的按钮。
在 API 30 上,Android 对包管理器进行了更改,因此我们无法再访问活动,除非它们已在标签中声明<queries>。
我在 AndroidManifest 文件上设置了查询节点,如下所示
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.APP_EMAIL" />
</intent>
</queries>
Run Code Online (Sandbox Code Playgroud)
当我尝试使用意图进行查询时,包管理器上的方法返回零项。
fun isEmailAppInstalled(context: Context): Boolean {
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_APP_EMAIL)
return context.packageManager.queryIntentActivities(intent, 0).isNotEmpty()
}
Run Code Online (Sandbox Code Playgroud)
env*_*yM6 13
在您的AndroidManifest添加中:
<queries>
<intent>
<action android:name="android.intent.action.SENDTO"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="mailto"/>
</intent>
</queries>
Run Code Online (Sandbox Code Playgroud)
并将您的代码更改为
val intent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
intent.addCategory(Intent.CATEGORY_DEFAULT)
return context.packageManager.queryIntentActivities(intent, 0).isNotEmpty()
Run Code Online (Sandbox Code Playgroud)
语言语法可能需要双重检查/更新,因为我已经测试了该解决方案,Xamarin.Forms并且也与 API 29 及以下版本兼容。
根据基于 API 级别 30 或更高级别的新文档,如果您想访问设备上安装的其他应用程序,则必须通过<queries>在应用程序的清单文件中添加该元素来声明包可见性。你在这里做什么。同时系统会自动使某些应用程序对您的应用程序可见。我们可以通过以下方式检查
adb shell dumpsys package queries
Run Code Online (Sandbox Code Playgroud)
在命令输出中,找到forceQueryable 部分。此部分包括设备自动对您的应用程序可见的包列表。(此部分从文档复制)。
因此,在这种情况下,如果没有标签,我可以通过Intent.createChooser<queries>从我的设备上的 API 30 和 29 访问电子邮件应用程序。
fun isEmailAppInstalled(context: Context) {
/* val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_APP_EMAIL)
return context.packageManager.queryIntentActivities(intent, 0).isNotEmpty()*/
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_APP_EMAIL)
try {
startActivity(Intent.createChooser(intent, "Choose your Email App"))
} catch (e: ActivityNotFoundException) {
Log.i("ZI", "No Email App Found")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2074 次 |
| 最近记录: |