私は最近このようなことに取り組んでいました。私が言いたいことは、別のスレッドでこれを確実に実行して実行することです。アプリケーション情報を照会することは遅いです。以下は、インストールされているすべてのアプリケーションの一覧を表示します。これはおそらくに興味を持っていないシステムのアプリの多くが含まれています。
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);
}
}
EDIT:また、最長取るおそらく何である(アプリの名前とアイコンを取得するには - 私はそれ上の任意の本当の深い検査を行っていないが - これを使用する:
String label = (String)pm.getApplicationLabel(app);
Drawable icon = pm.getApplicationIcon(app);
insta lledAppsには、今必要なアプリの完全なリストが必要です。これがうまくいくと思っていますが、返さなければならないアプリケーションに応じてロジックを少し変更しなければならないかもしれません。再び、それは遅いですが、あなたが回避しなければならないものです。頻繁にアクセスするデータであれば、データベースにデータキャッシュを構築することができます。
多くのものがありますが、強制的に強制したりエラーを出すことはありませんでした。メソッドは明らかにarraylistを返しますが、これを初めて知っています。リストビューのように画面上にリストを表示する方法はわかりません。 – user577732