Package Manager クラスを使用して、インストールされているすべてのアプリケーションのリストを取得しています。次のフラグを使用して、「ユーザーアプリ」と「システムアプリ」を判断しようとしました。
ApplicationInfo.FLAG_SYSTEM
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP
これは機能しましたが、私が望んでいた正確な方法ではありませんでした。すべてのアプリのリストをフィルタリングして判断できるようにしたい:このアプリはアプリ ドロワーに表示されているか?
望ましくない副作用を引き起こす可能性があるため、低レベルのシステム アプリとやり取りしたくありません。しかし、「com.google.chrome」のようなものを含めたいと思います。これは、アプリ ドロワー内のアプリですが、技術的にはシステム アプリとしてインストールされるためです。
Package Manager から返された ApplicationInfo リストをデバッグしたところ、一部のアプリの Int Icon 値が 0 またはそれ以外 (1254865 など) であることがわかりました。だから私は試しました:
List<ApplicationInfo> allApps = Utilities.getAllApps(mContext);
List<ApplicationInfo> visibleApps = new ArrayList<>();
for (ApplicationInfo appInfo : allApps) {
if (appInfo.icon != 0) {
visibleApps.add(appInfo);
}
}
これは私が近づくのに役立ちましたが、私のストック エミュレーターには 100 個の "allApps" があり、このロジックは 54 個のアプリにドリルダウンするのに役立ちました. しかし、ドロワーには 25 個のアプリしかありません... 更新: Android は、新しい API バージョンでこの実装から離れた可能性があります。