getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES) 返回 null
如果我打电话,
PackageManager pm = getPackageManager () ;
List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_PROVIDERS) ;
我会得到已安装软件包的列表,包括它们声明的任何提供程序(即 pis[i].providers 可能为非空)。
但是,如果我在标志中包含 PackageManager.GET_ACITIVITIES,就像
PackageManager pm = getPackageManager () ;
List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_ACTIVITIES | PackageManager.GET_PROVIDERS) ;
我希望获得已安装软件包的“相同”列表,但 pis[i].activities 也为非空。但我没有,我得到一个空列表。
在 文档?
我当前的工作是将 PackageManager.GET_ACTIVITIES 排除在标志之外,然后按如下方式循环返回的列表:
for (PackageInfo pi : pis) {
try {
PackageInfo tmp = pm.getPackageInfo (pi.packageName, PackageManager.GET_ACTIVITIES) ;
pi.activities = tmp.activities ;
}
catch (NameNotFoundException e) {
Log.e (TAG, e.getMessage ()) ;
}
但这似乎是一个真正的拼凑。
我唯一能找到的 getInstalledPackages (PackageManager.GET_ACTIVITIES) 返回空列表的提及是这里,但这种情况下的问题似乎是在主应用程序线程之外调用 getInstalledPackages() ,而我的情况并非如此。
ps 这是 Gingerbread 的 .602 VZW 版本,以防万一
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我遇到了同样的问题,并找到了更好的解决方法:
请注意,我需要查询
PackageManager
两次。一旦使用getPackageManager().getInstalledPackages(...)
并再次使用getPackageManager().getPackageInfo(...)
我希望它有所帮助。
I came across the same issue and found out a better workaround:
Notice that I need to query
PackageManager
twice. Once usinggetPackageManager().getInstalledPackages(...)
and again usinggetPackageManager().getPackageInfo(...)
I hope it helps.