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

9
我正在获取手机上所有当前运行的进程列表。我已经通过以下方式完成了这个任务:
private List<RunningAppProcessInfo> process;
private ActivityManager activityMan;
...
activityMan = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
process = activityMan.getRunningAppProcesses();

这个很好用。当我调用processName字段时,如下:
process.get(i).processName;

我拿到了一个类似com.android.mail这样的名称。

我想做的是使用它来获取该应用程序的访问权限,以便我可以向用户显示其图标,但我找不到任何可以帮助我的东西。是否有什么可以帮助我的?

我正在我的Hero手机上测试此应用程序,因此API级别为3(Android 1.5)。

谢谢。

4个回答

15

好的,我解决了。如果你好奇,这就是我所做的。

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

谢谢。


14
使用进程名称是错误的——有时可能是正确的,但并非总是如此。您需要使用软件包名称。 - hackbod

0

0
尝试这种方式,创建一个名为PackageInformation的类: public class 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 = no system packages */ 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; 
 }


 }

tuck this away somewhere and now to access the info from your working class do this:

  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;

}


0

自 Android 3.0 开始,您可能想要获取一个更大的启动器图标,而您无法按照您所描述的方式获取。如果是这样,也许我下面的问题答案可以帮助您:在 Android 中获取应用程序图标


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接