2013-08-27 35 views
11

Có một java.lang.ClassCastException khi tôi đang cố gắng tải biểu tượng ứng dụng đã cài đặt.Nhận tất cả biểu tượng Ứng dụng đã cài đặt trong Android: java.lang.ClassCastException

Đây là mã của tôi.

public Bitmap getAppIcon(String path) { 
     PackageInfo pi = pm.getPackageArchiveInfo(path, 0); 
     pi.applicationInfo.sourceDir = path; 
     pi.applicationInfo.publicSourceDir = path; 
     Drawable icon = pi.applicationInfo.loadIcon(pm); 
     Bitmap APKicon = ((BitmapDrawable) icon).getBitmap(); 
     return APKicon; 
    } 

nơi, pm

PackageManager pm = getPackageManager(); 

và lỗi hiển thị trong LogCat

Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 

Hope ai có thể giúp tôi.

+0

Kiểm tra chủ đề này xin vui lòng http://stackoverflow.com/questions/10623570/how-to-programmatically-re-apply-a-9-patch-image-to -an-imageview –

Trả lời

19

Vấn đề của bạn là Biểu tượng của bạn là không thể hiện của BitmapDrawable, người ta có thể kiểm tra như thế:

Bitmap APKicon; 
if(icon instanceof BitmapDrawable) { 
    APKicon = ((BitmapDrawable)icon).getBitmap(); 
} 

trong trường hợp này giải pháp của bạn sẽ là đúng, người ta chỉ có thể cast nó, nhưng nếu không (và rằng là trường hợp của bạn) cần phải làm một cái gì đó như thế:

else{ 
    Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(),icon.getIntrinsicHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    icon.draw(canvas); 
    APKicon = bitmap; 
} 

giải pháp này sẽ làm việc trong mọi trường hợp

+0

tốt! công việc này! cảm ơn! –

0
public Bitmap getAppIcon(String path) { 
    PackageInfo pi = pm.getPackageArchiveInfo(path, 0); 
    Drawable icon = pi.applicationInfo.loadIcon(pm); 
    Bitmap APKicon = ((NinePatchDrawable) icon).getBitmap(); 
    return APKicon; 
} 

Bạn phải bỏ biểu tượng vào NinePatchDrawable (dòng 4).

0
Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 

Vấn đề:

Bạn đang cố gắng định kiểu BitmapDrawable để NinePatchDrawable

Giải pháp:

Hãy thử điều này:

public Bitmap getAppIcon(String path) { 
     PackageInfo pi = pm.getPackageArchiveInfo(path, 0); 
     pi.applicationInfo.sourceDir = path; 
     pi.applicationInfo.publicSourceDir = path; 
     Drawable icon = pi.applicationInfo.loadIcon(pm); 
     Bitmap APKicon = ((NinePatchDrawable) icon).getBitmap(); // cast to NinePatchDrawable 
     return APKicon; 
    } 

PackageManager.GetApplicationInfo trả về một đối tượng Drawable. Nó có thể không phải là BitmapDrawable.

Bạn có thể kiểm tra xem nó là một BitmapDrawable với:

Nếu pm.GetApplicationIcon(packname)BitmapDrawable Rồi ...

Nếu bạn muốn chuyển đổi một tổ chức phi BitmapDrawable đến một BitmapDrawable thì bạn cần phải:

  • Tạo bitmap có thể thay đổi.
  • Vẽ drawable với Canvas.DrawDrawable
+0

downvoter care để bình luận ?? –

+1

Tôi không downvote, nhưng tôi thấy thông báo "Phương thức getBitmap() là không xác định cho loại NinePatchDrawable" –

Các vấn đề liên quan