Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android PackageManager未返回targetSdkVersion 30的正确软件包_Android_Build.gradle_Android Package Managers_Target Sdk - Fatal编程技术网

Android PackageManager未返回targetSdkVersion 30的正确软件包

Android PackageManager未返回targetSdkVersion 30的正确软件包,android,build.gradle,android-package-managers,target-sdk,Android,Build.gradle,Android Package Managers,Target Sdk,我正在使用PackageManager获取用户设备上安装的所有软件包的列表。在我从targetSdkVersion 29切换到30之前,它工作得非常好 当我将targetSdkVersion从29增加到30时,PackageManager不再返回正确的包列表(我正在制作一个启动器,事实上,它几乎不返回任何可以启动的包) 我尝试了pm.getInstalledPackages(0),pm.getInstalledApplications(0)以及检索应用程序的方法,如图所示。他们没有一个人工作,而

我正在使用
PackageManager
获取用户设备上安装的所有软件包的列表。在我从targetSdkVersion 29切换到30之前,它工作得非常好

当我将targetSdkVersion从29增加到30时,
PackageManager
不再返回正确的包列表(我正在制作一个启动器,事实上,它几乎不返回任何可以启动的包)

我尝试了
pm.getInstalledPackages(0)
pm.getInstalledApplications(0)
以及检索应用程序的方法,如图所示。他们没有一个人工作,而且所有人以前都在工作

build.gradle版本设置:

compileSdkVersion 30
defaultConfig {
    minSdkVersion 23
    targetSdkVersion 29
}

有人知道这里发生了什么吗?

您需要在清单中添加声明,以便在针对Android 11(API 30)时查看其他软件包:

特别是,如果你正在建造一个发射器


...
将允许所有

Intent-Intent=新意图(Intent.ACTION\u MAIN,空);
intent.addCategory(intent.CATEGORY_启动器);
context.getPackageManager().QueryInputActivities(intent,0);

可以将匹配项返回。

正如@ephemient在他对答案的评论中指出的那样,使用解决了它


之所以这样做,是因为Android 11之后的限制访问应用程序,这也解释了这一点。

如果您需要
pm.getInstalled*()
的结果,也会有限制访问应用程序。但是意图查询应该是启动器实际需要的。我实际上已经在清单中设置了这些声明,但是你关于使用权限的评论是我的解决方案。有了这个许可,它又能正常工作了!谢谢!