2012-05-22 45 views
15

Tôi muốn nhận các biểu tượng của tất cả các ứng dụng đã cài đặt của mình. Tôi có thể lấy các biểu tượng đó bằng cách sử dụng trình quản lý gói không? Có chức năng nào cho nó không? Hoặc bất kỳ cách nào khác để có được biểu tượng của tất cả các ứng dụng đã cài đặt trong bitmap?Tải các biểu tượng của tất cả các ứng dụng đã cài đặt trong android

Cảm ơn!

+0

Vì Android 3.0 bạn có thể muốn có biểu tượng trình khởi chạy lớn hơn mà bạn không thể có được cách bạn mô tả. Nếu có, có lẽ câu trả lời của tôi cho câu hỏi dưới đây có thể giúp bạn: http://stackoverflow.com/questions/4600740/getting-app-icon-in-android/16279240#16279240 –

Trả lời

29
try { 
    String pkg = "com.app.my";//your package name 
    Drawable icon = getContext().getPackageManager().getApplicationIcon(pkg); 
    imageView.setImageDrawable(icon); 
} catch (PackageManager.NameNotFoundException ne) { 

} 

Kiểm tra here để biết thêm chi tiết.

+0

câu trả lời hoàn hảo. Tôi upvoted bạn @Ponmalar –

3

Hãy thử cách này: Tạo một lớp được gọi là 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 <InfoObject> getPackages() { 
     ArrayList <InfoObject> apps = getInstalledApps(false); 
     final int max = apps.size(); 
     for (int i = 0; i < max; i++) { 
      apps.get(i).prettyPrint(); 
     } 
     return apps; 
    } 

    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 này đi đâu đó và bây giờ để truy cập thông tin từ lớp Hoạt động làm việc của bạn làm điều này:

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; 

} 
3

tôi thấy nó cách dễ nhất:

private List<ResolveInfo> installedApps() { 
    final Intent main_intent = new Intent(Intent.ACTION_MAIN, null); 
    main_intent.addCategory(Intent.CATEGORY_LAUNCHER); 
    return package_manager.queryIntentActivities(main_intent, 0); 
} 

Bây giờ để tải biểu tượng, hãy sử dụng điều này:

for(ResolveInfo ri : installedApps()) { 
    // to get drawable icon --> ri.loadIcon(package_manager) 
} 
Các vấn đề liên quan