私が電話したら
PackageManager pm = getPackageManager () ;
List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_PROVIDERS) ;
インストールされているパッケージのリストを取得します。これには、パッケージが宣言するすべてのプロビダーが含まれます (つまり、pis[i].providers が null でない可能性があります)。
ただし、次のように、フラグの中に PackageManager.GET_ACITIVITIES を含めると、
PackageManager pm = getPackageManager () ;
List<PackageInfo> pis = pm.getInstalledPackages (PackageManager.GET_ACTIVITIES | PackageManager.GET_PROVIDERS) ;
インストール済みパッケージの「同じ」リストを取得することを期待していますが、pis[i].activities も null ではありません。しかし、そうではありません。空のリストが表示されます。
ドキュメントに記載されていないフラグの中に 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ビルドです。