Как получить значок других приложений (Android)

То, что я делаю, это получить список всех текущих запущенных процессов на телефоне. Что я сделал,

private List<RunningAppProcessInfo> process;
private ActivityManager activityMan;
...
activityMan = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
process = activityMan.getRunningAppProcesses();

это отлично работает. Когда я вызываю поле processName, например

process.get(i).processName;

Я получаю имя, например, com.android.mail.

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

Я тестирую это приложение у своего героя, поэтому уровень api равен 3 (android 1.5).

Спасибо.

Ответ 1

Хорошо, я понял, как это сделать. В случае, если это любопытно, это то, что я сделал.

private PackageManager pk;
pk = getPackageManager();
....
pk.getApplicationIcon(process.get(i).processName)

Спасибо.

Ответ 2

попробуйте этот способ сделать класс с именем packageinformation:

открытый класс PackageInformation {

private Context mContext;

public  PackageInformation(Context context){
    mContext=context;   
}


class InfoObject {
public String appname = "";
public String pname = "";
public String versionName = "";
public int versionCode = 0;
public Drawable icon;


public void InfoObjectAggregatePrint() {//not used yet
    Log.v(appname,appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
}

}      private ArrayList getPackages() {        ArrayList apps = getInstalledApps (false);/* false = нет системных пакетов */   final int max = apps.size();   для (int я = 0; i

 public ArrayList<InfoObject> getInstalledApps(boolean getSysPackages) {
ArrayList<InfoObject> res = new ArrayList<InfoObject>();        
List<PackageInfo> packs = mContext.getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
    PackageInfo p = packs.get(i);
    if ((!getSysPackages) && (p.versionName == null)) {
        continue ;
    }
    InfoObject newInfo = new InfoObject();
    newInfo.appname = p.applicationInfo.loadLabel(mContext.getPackageManager()).toString();
    newInfo.pname = p.packageName;
    newInfo.versionName = p.versionName;
    newInfo.versionCode = p.versionCode;
    newInfo.icon = p.applicationInfo.loadIcon(mContext.getPackageManager());
    res.add(newInfo);
}
return res; 
 }


 }

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

  PackageInformation androidPackagesInfo=new PackageInformation(this);      
    ArrayList<InfoObject> appsData=androidPackagesInfo.getInstalledApps(true);


for (InfoObject info : appsData) {


            Toast.makeText(MainActivity.this, info.appname,2).show();
                Drawable somedrawable=info.icon;

}

Ответ 3

Начиная с Android 3.0, вы можете захотеть получить более крупный значок запуска, который вы не сможете получить, как вы описали. Если да, возможно, мой ответ на вопрос ниже поможет вам: Получение значка приложения в Android