how to get running applications icon on android programmatically

后端 未结 2 623
广开言路
广开言路 2020-12-06 15:16

Below here is my code but i am getting default android launcher icon for all running applications:

PackageManager pm = getPackageManager();

            Acti         


        
相关标签:
2条回答
  • 2020-12-06 15:43

    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.

    0 讨论(0)
  • 2020-12-06 15:45

    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

    0 讨论(0)
提交回复
热议问题