0

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 バージョンでこの実装から離れた可能性があります。

4

1 に答える 1

1

このアプリはアプリ ドロワーに表示されますか?

「アプリ ドロワー」がホーム スクリーン ランチャーを指している場合、そこに何を表示するかの決定は、ホーム スクリーン ランチャーの開発者に委ねられています。

/アクティビティを探して、およびを介して、ホーム画面ランチャーに表示するために提供されているアクティビティを見つけることができます。そこから、それらのアクティビティを提供するアプリのリストを導き出すことができます (0、1、または複数のそのようなアクティビティを提供するアプリがあることに注意してください)。PackageManagerqueryIntentActivities()ACTION_MAINCATEGORY_LAUNCHER

于 2017-10-13T14:20:24.487 に答える