Ответ 1
Хорошо, я понял, как это сделать. В случае, если это любопытно, это то, что я сделал.
private PackageManager pk;
pk = getPackageManager();
....
pk.getApplicationIcon(process.get(i).processName)
Спасибо.
То, что я делаю, это получить список всех текущих запущенных процессов на телефоне. Что я сделал,
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).
Спасибо.
Хорошо, я понял, как это сделать. В случае, если это любопытно, это то, что я сделал.
private PackageManager pk;
pk = getPackageManager();
....
pk.getApplicationIcon(process.get(i).processName)
Спасибо.
попробуйте этот способ сделать класс с именем 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;
}
Начиная с Android 3.0, вы можете захотеть получить более крупный значок запуска, который вы не сможете получить, как вы описали. Если да, возможно, мой ответ на вопрос ниже поможет вам: Получение значка приложения в Android
В то время как packagemanager.getApplicationIcon(pkagename) работает для некоторых приложений, но не для всех.
Найден лучший ответ здесь: как запустить программный значок приложения на программном обеспечении Android
Применение:
Drawable ico=getApplicationInfo(packagemanager,PackageManager.GET_META_DATA).loadIcon(getPackageManager());