2011-05-28 10 views
14

こんにちは私は、ユーザーデバイス上のすべてのインストールされたアプリケーションのリストを取得したい私は最長の時間のためにグーグルしていますが、 getPackages()メソッドを使用する方法を理解できません。実際のリストを作成する方法上の任意のヘルプは、私はちょうど、実際に任意の助けに感謝を示すためのリストを取得することはできませんで、すでにすべてのことのコードを持っている大きな助けとなり、それインストールされているアンドロイドアプリケーションのリストを取得

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

でリストを作成

+0

多くのものがありますが、強制的に強制したりエラーを出すことはありませんでした。メソッドは明らかにarraylistを返しますが、これを初めて知っています。リストビューのように画面上にリストを表示する方法はわかりません。 – user577732

答えて

57

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

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には、今必要なアプリの完全なリストが必要です。これがうまくいくと思っていますが、返さなければならないアプリケーションに応じてロジックを少し変更しなければならないかもしれません。再び、それは遅いですが、あなたが回避しなければならないものです。頻繁にアクセスするデータであれば、データベースにデータキャッシュを構築することができます。

+0

いいえ、私は主にシステムアプリに興味があります。実際には、私はrootアプリしか書いていませんので、これを見てください。 – user577732

+0

アダプターの使用を検討してください。リストのスクロールが楽になりますが、リストの大きさにかかわらず、すぐに読み込まれます。 – tacone

+0

現在実行中のプロセス(ユーザーがインストールしたアプリケーションとシステムアプリケーションを別々に)にアクセスしたい。手伝ってくれませんか? –

関連する問題