Как получить значок других приложений (Android) - PullRequest
10 голосов
/ 05 марта 2010

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

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).

Спасибо.

Ответы [ 4 ]

16 голосов
/ 05 марта 2010

Хорошо, я разобрался, как это сделать. На случай, если вам интересно, вот что я сделал.

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

Спасибо.

0 голосов
/ 15 мая 2016

Хотя packagemanager.getApplicationIcon (pkagename) работает для некоторых приложений, но не для всех.

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

Использование:

Drawable ico=getApplicationInfo(packagemanager,PackageManager.GET_META_DATA).loadIcon(getPackageManager());
0 голосов
/ 29 апреля 2013

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

0 голосов
/ 11 марта 2013

попробуйте таким образом создать класс с именем 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 i = 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;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...