如何获取其他应用程序的图标(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这样的名字。

我想要做的是使用这个来访问该应用程序,所以我可以显示它的图标给用户,但我无法find任何让我这样做。 有什么可以帮助我吗?

我在我的英雄testing这个应用程序,所以API级别是3(Android 1.5)。

谢谢。

Solutions Collecting From Web of "如何获取其他应用程序的图标(Android)"

好吧,我想出了如何做到这一点。 万一你好奇这是我做的。

 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(); for(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; 

}

从Android 3.0开始,您可能希望获得更大的启动器图标,以至于无法按照您所描述的方式进行操作。 如果是这样,也许我下面的问题的答案可以帮助你: 在Android中获取应用程序图标

虽然packagemanager.getApplicationIcon(pkagename)适用于某些应用程序,但不是全部。

在这里find更好的答案: 如何以编程方式获取Android上运行的应用程序图标

用途:

 Drawable ico=getApplicationInfo(packagemanager,PackageManager.GET_META_DATA).loadIcon(getPackageManager());