2

まず、これが StackOverflow に関する私の最初の投稿であると言いたいので、これが正しく行われていることを願っています。

ユーザーのすべてのアプリを表示する Android アプリを作成しようとしています。私が抱えている問題は、一部のアプリが複数回表示されることです。パッケージに関連付けられたアクティビティを確認する方法がわかりませんが、次のような状況だと思います。

Android: インストールされたアクティビティのリストを、ランチャーに表示されるように、重複することなく取得する方法

インテント ソリューションは重複を表示しませんが、GridView での表示に似たものを使用するにはどうすればよいですか?

編集:迅速な対応ありがとうございます。これは、私がすでにパッケージを取得する方法です。ただし、0 フラグは使用していません。0 フラグを代入した後も、重複を受け取りました。GridView の動作と関係がありますか? グリッド ビューを下にスクロールして上に戻ると、リストの順序が異なることに気付きました。

アプリをリストに入れるためのコード:

ArrayList<ApplicationInfo> apps =  (ArrayList<ApplicationInfo>) manager.getInstalledApplications(0);  //manager is a variable containing getPackageManager

編集2:

次のコードを使用して ArrayList を出力した後:

 for(int i = 0; i < apps.size(); i++){

        Log.i((String) apps.get(i).loadLabel(manager), apps.get(i).packageName);

    }

配列に重複はないと結論付けることができます。ただし、それらはどういうわけかグリッドビューに表示されます。

最終編集:

この質問に対する一番の答えは、GridViewの問題を解決することになりました:

画面スクロール時に GridView 内の項目が繰り返される

4

2 に答える 2

2

現在インストールされているパッケージを取得する別の方法を次に示します。この方法で情報を取得すると、重複が発生しません。

            PackageManager packageManager = null;
            List<ApplicationInfo> appsList = new ArrayList<ApplicationInfo>();
            try {
                packageManager = getPackageManager();
                if (packageManager != null) {
                    appsList = packageManager.getInstalledApplications(0);
                }
            } catch (Exception e1) {
                Log.v("TAG", "This is my error: ", e1);
            }

その後、ApplicationInfo オブジェクトからさまざまな情報 (アイコン、名前などを含む) を取得できます。

于 2013-01-10T15:41:02.737 に答える
0

これにより、問題が完全に解決されるはずです。

     PackageManager packageManager = null;
 List<ApplicationInfo> appsListTest = new ArrayList<ApplicationInfo>();
 try {

     packageManager = context.getPackageManager();
     if (packageManager != null) {
         appsListTest = packageManager.getInstalledApplications(0);

     }
 } catch (Exception e1) {
     Log.v("TAG", "This is my error: ", e1);
 }

 Log.d("LOG", " New PM : " + appsListTest.size() );

 Iterator<ApplicationInfo> iterator = appsListTest.iterator();
while (iterator.hasNext()) {
    Log.d("LOG", " : " + iterator.next().loadLabel(packageManager).toString());



}
于 2013-05-02T20:23:08.357 に答える