こんにちは私は最も長い間グーグルしてきたユーザーのデバイスにインストールされているすべてのアプリケーションのリストを取得したいのですが、このリンクが最も近いものを見つけることができず、私が新しいことを除いて正常に動作します理解できませんgetPackages();メソッドの使用方法それを使ってリストを作成します
http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon
実際のリストを作成する方法に関するヘルプは、私がすでにすべてのコードを持っているという大きな助けになりますが、リストに実際に表示することができません。
私は最近このようなことに取り組んでいました。前もって言うことの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には、必要なアプリの完全なリストが含まれているはずです。これがお役に立てば幸いですが、返す必要のあるアプリによっては、ロジックを少し変更する必要がある場合があります。繰り返しますが、それは遅いですが、それはあなたが回避しなければならないものです。頻繁にアクセスするものである場合は、データベースにデータキャッシュを構築することをお勧めします。