Rajiv Gaikwad
Rajiv Gaikwad

Reputation: 107

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:

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);
                    }

Upvotes: 3

Views: 12424

Answers (2)

Paolo Rovelli
Paolo Rovelli

Reputation: 9703

To retrieve the app icon, you can use the getApplicationIcon() method of the PackageManger.

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:

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.

Upvotes: 0

Dhaval Parmar
Dhaval Parmar

Reputation: 18978

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:

enter image description here

Upvotes: 17

Related Questions