如何获取其他应用程序的图标(Android)

时间:2010-03-05 05:18:38

标签: java 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)。

感谢。

4 个答案:

答案 0 :(得分:16)

好的,我想出了怎么做。如果你好奇这就是我所做的。

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

感谢。

答案 1 :(得分:0)

尝试这样做一个名为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;

}

答案 2 :(得分:0)

从Android 3.0开始,你可能想要获得一个更大的启动器图标,你无法按照你所描述的方式获得。如果是这样,也许我对下面问题的回答可以帮助您:Getting App Icon in Android

答案 3 :(得分:0)

虽然packagemanager.getApplicationIcon(pkagename)适用于某些应用,但并非适用于所有应用。

在这里找到更好的答案: how to get running applications icon on android programmatically

用途:

matplotlib.pyplot