1

尝试检索每个包的所有活动会导致所有活动都为空 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"));

所有包的p.activities为空。根据https://developer.android.com/reference/android/content/pm/PackageInfo.html#activities它不应该为空,因为设置了 GET_ACTIVITIES 标志。

那么问题出在哪里呢?

4

1 回答 1

2

我的错,我搞砸了按位运算符。必须使用 OR 运算符 ( |) 而不是 AND 一 ( &),如下所示:

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

但是,这个调用会导致TransactionTooLargeException由于 Android 中不同进程之间更改数据的大小限制,因此大多数返回的packageInfos列表可能为 null 或空

于 2017-01-24T16:25:29.517 回答