简体   繁体   English

如何以编程方式在android上运行应用程序图标

[英]how to get running applications icon on android programmatically

Below here is my code but i am getting default android launcher icon for all running applications: 下面是我的代码,但我得到所有正在运行的应用程序的默认android启动器图标:

PackageManager pm = getPackageManager();

            ActivityManager am1 = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

            List<RunningTaskInfo> processes = am1.getRunningTasks(Integer.MAX_VALUE);

                if (processes != null) {
                    for (int k = 0; k < processes.size(); k++) {
                        // String pkgName = app.getPackageName();
                        String packageName = processes.get(k).topActivity
                                .getPackageName();
                        Drawable ico = null;
                        try
                        {
                         String pName = (String) pm.getApplicationLabel(pm
                                .getApplicationInfo(packageName,
                                        PackageManager.GET_META_DATA));

                            ico = pm.getApplicationIcon(pName);

                        } 
                        catch (NameNotFoundException e) 
                        {
                            Log.e("ERROR", "Unable to find icon for package '"
                                    + packageName + "': " + e.getMessage());
                        }
                        icons.put(processes.get(k).topActivity.getPackageName(),ico);
                    }

just replace this line 只需更换此行

ico = pm.getApplicationIcon(pName);

to this 对此

ico = getApplicationInfo().loadIcon(getPackageManager()); 

EDITED full code : 已编辑完整代码:

public void getAllICONS() {

    PackageManager pm = getPackageManager();

    ActivityManager am1 = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

    List<RunningTaskInfo> processes = am1
            .getRunningTasks(Integer.MAX_VALUE);

    if (processes != null) {
        for (int k = 0; k < 5; k++) {
            // String pkgName = app.getPackageName();
            String packageName = processes.get(k).topActivity
                    .getPackageName();
            Log.e("packageName-->", "" + packageName);
            Drawable ico = null;
            try {
                String pName = (String) pm.getApplicationLabel(pm
                        .getApplicationInfo(packageName,
                                PackageManager.GET_META_DATA));
                name.add("" + pName);
                ApplicationInfo a = pm.getApplicationInfo(packageName,
                        PackageManager.GET_META_DATA);
                ico = getPackageManager().getApplicationIcon(
                        processes.get(k).topActivity.getPackageName());
                getPackageManager();
                Log.e("ico-->", "" + ico);

            } catch (NameNotFoundException e) {
                Log.e("ERROR", "Unable to find icon for package '"
                        + packageName + "': " + e.getMessage());
            }
            // icons.put(processes.get(k).topActivity.getPackageName(),ico);
            icons.add(ico);

        }
    }
}

above code is show you icons like: 上面的代码显示你的图标:

在此输入图像描述

To retrieve the app icon, you can use the getApplicationIcon() method of the PackageManger . 要检索应用程序图标,可以使用PackageMangergetApplicationIcon()方法。

In your case, since you are retriving the icon of the running apps, you can do something like: 在您的情况下,由于您正在重新查找正在运行的应用程序的图标,因此您可以执行以下操作:

final ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
final PackageManager pm = getPackageManager();
List<ActivityManager.RunningTaskInfo> runningTasks;

try {
    runningTasks = am.getRunningTasks(100);
}
catch ( SecurityException e ) {
    runningTasks = new ArrayList<ActivityManager.RunningTaskInfo>();
    //e.printStackTrace();
}

Drawable icon;

for ( ActivityManager.RunningTaskInfo task : runningTasks ) {
    final String packageName = task.topActivity.getPackageName();

    try {
            icon = pm.getApplicationIcon(packageName);
    }
    catch ( PackageManager.NameNotFoundException e ) {
            //e.printStackTrace();
    }
}

Otherwise, even better, you may use the other implementation of getApplicationIcon() , thus: 否则,更好的是,您可以使用getApplicationIcon()的其他实现,因此:

ApplicationInfo ai;

try {
    ai = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
} catch ( PackageManager.NameNotFoundException e ) {
    ai = null;
    //e.printStackTrace();
}

if ( ai != null ) {
    icon = pm.getApplicationIcon(ai);
}

PS: In any case, please note that getRunningTasks() will never return null , but an empty list at most. PS:无论如何,请注意getRunningTasks()永远不会返回null ,但最多只能返回一个空列表

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM