如何获取 Android 11 中已安装应用的列表

aja*_*eni 13 android android-package-managers android-update-app android-11

开发者网站上描述了这一行,但我没有完全理解它

Call getInstalledApplications() or getInstalledPackages(). Both methods should return a filtered list.
Run Code Online (Sandbox Code Playgroud)

事实上,我需要测试Testing package visibility behavior

https://developer.android.com/training/package-visibility/testing

zha*_*hen 26

Android 11 中有 3 种不同的方式来查询用户已安装的应用程序。

\n
    \n
  1. 如果您已经知道要查询哪些应用程序,只需在\n<queries>元素中提及\n包名称\nAndroidManifest中提及\n包名称即可。
  2. \n
\n
<manifest package="com.nikit.app">\n    <queries>\n        <package android:name="com.fake.app" />\n        <package android:name="com.fake.game" />\n    </queries>\n    ...\n</manifest>\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 如果您\xe2\x80\x99 不知道\n想要查询的应用程序的所有包名称,但有一组具有类似功能\n的应用程序\n您想要查询,那么您可以在\n中使用意图过滤器\n n<queries>元素根据您的要求,就像下面的代码片段中已经完成的那样。
  2. \n
\n
<manifest package="com.nikit.app">\n    <queries>\n        <intent>\n            <action android:name="android.intent.action.SEND" />\n            <data android:mimeType="image/jpeg" />\n        </intent>\n    </queries>\n    ...\n</manifest>\n
Run Code Online (Sandbox Code Playgroud)\n

<intent>元素看起来很像<intent-filter>,但几乎没有什么区别。元素有以下限制:

\n
    \n
  • 元素<intent>只能有一个<action>元素。
  • \n
  • 该元素只能具有以下属性:mimeType、\nschemehost
  • \n
\n
    \n
  1. 如果您想像之前那样查询用户的所有应用程序,则需要QUERY_ALL_PACKAGES在\n 中包含权限AndroidManifest。这是一种normal权限,一旦安装应用程序就会被授予。
  2. \n
\n
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>\n
Run Code Online (Sandbox Code Playgroud)\n