web-dev-qa-db-ja.com

インストールされているAndroidアプリケーションのリストを取得する

こんにちは私は最も長い間グーグルしてきたユーザーのデバイスにインストールされているすべてのアプリケーションのリストを取得したいのですが、このリンクが最も近いものを見つけることができず、私が新しいことを除いて正常に動作します理解できませんgetPackages();メソッドの使用方法それを使ってリストを作成します

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

実際のリストを作成する方法に関するヘルプは、私がすでにすべてのコードを持っているという大きな助けになりますが、リストに実際に表示することができません。

17
user577732

私は最近このようなことに取り組んでいました。前もって言うことの1つは、これを確実に別のスレッドで実行することです。アプリケーション情報のクエリは低速です。以下に、インストールされているすべてのアプリケーションのリストを表示します。これには、おそらく興味のない多くのシステムアプリが含まれます。

PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(0);

ユーザーがインストールまたは更新したシステムアプリ(マップ、GMailなど)のみに制限するために、次のロジックを使用しました。

List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>();

for(ApplicationInfo app : apps) {
    //checks for flags; if flagged, check if updated system app
    if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
        installedApps.add(app);
    //it's a system app, not interested
    } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
        //Discard this one
    //in this case, it should be a user-installed app
    } else {
        installedApps.add(app);
    }
}

編集:また、アプリの名前とアイコンを取得するには(これはおそらく最も時間がかかるものです-私はそれについて実際の詳細な検査を行っていません-これを使用してください:

String label = (String)pm.getApplicationLabel(app);
Drawable icon = pm.getApplicationIcon(app);

installedAppsには、必要なアプリの完全なリストが含まれているはずです。これがお役に立てば幸いですが、返す必要のあるアプリによっては、ロジックを少し変更する必要がある場合があります。繰り返しますが、それは遅いですが、それはあなたが回避しなければならないものです。頻繁にアクセスするものである場合は、データベースにデータキャッシュを構築することをお勧めします。

65
Kevin Coppock