0

インストールされているすべてのアプリの名前とアイコンを表示したいと思います。これを行うには、次のコードで情報を取得しています:

List<PackageInfo> apps = getPackageManager().getInstalledPackages(0);
ArrayList<AppInfo> res = new ArrayList<>();
for(int i=0;i<apps.size();i++) {
    PackageInfo p = apps.get(i);
    if((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0){
        AppInfo newInfo = new AppInfo();
        newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
        newInfo.pname = p.packageName;
        newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
        res.add(newInfo);
    }
}

ListViewアイコンとアプリ名を表示するカスタムは既にありますが、アイコンにはIDorが必要URIです。

newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());

それは私に次のようなものを与えます:

android.graphics.drawable.BitmapDrawable@[numbers+letters]" (e.g. android.graphics.drawable.BitmapDrawable@803da37)

そして、私はこれを使用する方法がわかりません。

URI またはIDこのデータから取得する方法はありますか?

BitmapDrawable誰かがこの@...ここに質問を投稿しましたが、答えはありません。

EDIT: 実際には、私は でデータをストックしているHashMap<String, String>ので、次のようなものがあります:

map.put("name",p.applicationInfo.loadLabel(getPackageManager()).toString());
map.put("img", p.applicationInfo.loadIcon(getPackageManager()).toString());

次に、次を使用しSimpleAdapterます。

myListView = (ListView) findViewById(R.id.customListView);
SimpleAdapter myAdapter = new SimpleAdapter(this.getBaseContext(),listApp,R.layout.myLayout,
        new String[]{"img","name"},new int[]{R.id.img,R.id.name});
myListView.setAdapter(myAdapter);

使用するのは良い考えではないことはわかっていますHashMap<String, String>が、別の方法で行う方法がわかりません。

4

2 に答える 2

0

p.applicationInfo.loadIcon(getPackageManager()); アプリケーション/パッケージ アイコンのドローアブルを取得する正しい方法です。表示方法をご確認ください。その地域に問題があると思います。

于 2015-08-20T22:58:38.477 に答える
0

p.applicationInfo.loadIcon(getPackageManager()) はドローアブルを提供します。imageView に直接設定します。URI や ID は必要ありません。

于 2015-08-20T23:02:24.480 に答える