Android - Как получить значок приложения? - PullRequest
3 голосов
/ 10 апреля 2011

Я пытаюсь отобразить список задач следующим образом -

Иконка | ApplicationName | CheckBox

Поскольку я обнаружил, что ни один адаптер списка не поддерживает это, я решил разработать собственный адаптер, но я не могу получить значок приложения. Пока я попробовал это: -

public View getView(int position, View convertView, ViewGroup parent)
{
    View v = convertView;
    View row = inflater.inflate(R.layout.item, parent, false);
    CheckedTextView ctb = (CheckedTextView)row.findViewById(R.id.checkText);
    String pkgName = "com.abc.abc";

    ctb.setText("bla bla");
    ImageView iv = (ImageView)row.findViewById(R.id.image);
    List<PackageInfo> pkgs = activity.getPackageManager().getInstalledPackages(0);
    for(PackageInfo p : pkgs)
    {
       if(p.packageName.equals(pkgName))
       {
          Drawable d =  p.applicationInfo.loadIcon(pm);
           iv.setImageDrawable(d);
       }
    }

     return row;
}
}

И я уверен, что я пытаюсь сделать что-то глупое в этом коде. Пожалуйста, попробуйте поймать, что я делаю не так.

Спасибо.

Ответы [ 2 ]

8 голосов
/ 10 апреля 2011

Вы можете получить значок приложения (пакета) с:

String pkg = "com.app.my";
Drawable icon = getContext().getPackageManager().getApplicationIcon(pkg);
3 голосов
/ 07 мая 2012

Пожалуйста, ознакомьтесь с моим решением для получения списка значков приложения

При этом получаем список ResolveInfo всего приложения.

класс resolInfo содержит информацию, возвращаемую при разрешении намерения против IntentFilter. Это частично соответствует информации, полученной из тегов AndroidManifest.xml

Это способ получить список значков приложения в Android, надеюсь, этот пример поможет вам

    import java.util.List;


import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class IconListActivity extends ListActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        loadApps();  

    }



    private void loadApps() {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        List<ResolveInfo> mApps = getPackageManager().queryIntentActivities(mainIntent, 0);

        ListView listView = getListView();
        listView.setAdapter(new AppsAdapter(this,mApps));
     }

    public class AppsAdapter extends BaseAdapter {
        private LayoutInflater inflater;
        private List<ResolveInfo> mApps;

        public AppsAdapter(Context context, List<ResolveInfo> mApps) {
            this.inflater = LayoutInflater.from(context);
            this.mApps = mApps;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHendler hendler;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.row_view, null);
                hendler = new ViewHendler();
                hendler.textLable = (TextView)convertView.findViewById(R.id.textViewLable);
                hendler.iconImage = (ImageView)convertView.findViewById(R.id.imageViewIcon);
                convertView.setTag(hendler);
            } else {
                hendler = (ViewHendler)convertView.getTag();
            }
            ResolveInfo info = this.mApps.get(position);
            hendler.iconImage.setImageDrawable(info.loadIcon(getPackageManager()));
            hendler.textLable.setText(info.loadLabel(getPackageManager()));

            return convertView;

        }
        class ViewHendler{
            TextView textLable;
            ImageView iconImage;
        }


        public final int getCount() {
            return mApps.size();
        }

        public final Object getItem(int position) {
            return mApps.get(position);
        }

        public final long getItemId(int position) {
            return position;
        }
    }

}
...