如果我打电话
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_ACTIVITES 有什么特别之处吗?
我目前的工作是将 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) 返回一个空列表是here,但在这种情况下的问题似乎是关于在主应用程序线程之外调用 getInstalledPackages() 而这不是我的情况.
ps这是姜饼的.602 VZW版本,以防万一