本周早些时候我问了一个类似的问题,但我仍然不了解如何获取所有已安装应用程序的列表,然后选择一个运行.
我试过了:
Intent intent = new Intent(ACTION_MAIN);
intent.addCategory(CATEGORY_LAUNCHER);
Run Code Online (Sandbox Code Playgroud)
这只显示预先安装的应用程序或可以运行ACTION_MAIN Intent类型的应用程序.
我也知道我可以使用PackageManager来获取所有已安装的应用程序,但是如何使用它来运行特定的应用程序呢?
我的应用程序需要检查电子邮件应用程序是否存在,以便我们可以隐藏用于发送电子邮件的按钮。
在 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)