2013-03-22 102 views
2

下面这里是我的代码,但我得到了所有正在运行的应用程序默认的Android启动器图标:如何让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); 
        } 
+0

请注意,getRunningTasks()将永远不会返回null,但最多只能为空列表。阅读下面的答案。 – 2013-09-18 13:33:13

回答

10

只需更换这行

ico = pm.getApplicationIcon(pName); 

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

EDITED全码:

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

     } 
    } 
} 

上面的代码是显示你喜欢的图标:

enter image description here

+0

它显示所有应用程序的默认图标为什么 – 2013-03-25 10:20:33

+0

嗨@RajivGaikwad:请检查此:http://dj-android.blogspot.in/2013/02/multi-selection-listview-android-with.html – 2013-03-28 06:53:11

+0

首先告诉我你需要删除什么类型的数据?运行应用程序或任何其他数据(如表单sqlite数据库)?? – 2013-03-28 08:33:58

0

要检索的应用程序图标,你可以使用PackageMangergetApplicationIcon()方法。

在你的情况,因为你是retriving正在运行的应用程序的图标,你可以这样做:

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

否则,甚至更好,你可以使用其他实施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:在任何情况下,请注意getRunningTasks()永远[R eturn null,但是最多为空列表

相关问题