Android PackageManager.getInstalledPackages()的ActivityInfo[]为空

Android PackageManager.getInstalledPackages()的ActivityInfo[]为空,android,android-activity,null,package-managers,package-info,Android,Android Activity,Null,Package Managers,Package Info,尝试检索每个包的所有活动会导致所有包的ActivityInfo数组为空: List<PackageInfo> packageInfos = mPackageManager.getInstalledPackages( PackageManager.GET_ACTIVITIES & PackageManager.GET_SERVICES & PackageManager.GET

尝试检索每个包的所有活动会导致所有包的ActivityInfo数组为空:

List<PackageInfo> packageInfos = mPackageManager.getInstalledPackages(
                PackageManager.GET_ACTIVITIES &
                PackageManager.GET_SERVICES &
                PackageManager.GET_RECEIVERS &
                PackageManager.GET_PROVIDERS &
                PackageManager.GET_PERMISSIONS);

for (PackageInfo p : packageInfos) 
    Log.wtf(TAG, p.packageName + ": " + (p.activities == null ? "null" :"not null"));
List packageinfo=mPackageManager.getInstalledPackages(
PackageManager.GET_活动&
PackageManager.GET_服务&
PackageManager.GET_接收器&
PackageManager.GET_提供程序&
PackageManager.GET_权限);
对于(PackageInfo p:PackageInfo)
Log.wtf(标记,p.packageName+”:“+(p.activities==null?“null”:“notnull”);
p.activities对于所有包都为空。根据,它不应该为null,因为设置了GET_活动标志


那么问题出在哪里呢?

我的错,我弄乱了按位运算符。必须使用OR运算符(
|
)代替AND运算符(
&
),如下所示:

List<PackageInfo> packageInfos = mPackageManager.getInstalledPackages(
                PackageManager.GET_ACTIVITIES |
                PackageManager.GET_SERVICES |
                PackageManager.GET_RECEIVERS |
                PackageManager.GET_PROVIDERS |
                PackageManager.GET_PERMISSIONS);
List packageinfo=mPackageManager.getInstalledPackages(
PackageManager.GET_活动|
PackageManager.GET_服务|
PackageManager.GET_接收器|
PackageManager.GET_提供程序|
PackageManager.GET_权限);
但是,由于Android中不同进程之间更改的数据大小限制,此调用导致出现
TransactionTooLargeException
,因此最有可能返回的
PackageInfo
列表将为null或空