2013-08-27 15 views
11

Yüklü uygulamalar simgesi almaya çalıştığımda bir java.lang.ClassCastException var.Android'deki Tüm Yüklü Uygulama simgelerini edinin: java.lang.ClassCastException

İşte kodum.

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

, pm

PackageManager pm = getPackageManager(); 

ve LogCat gösterilen hata

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

Umut herkes bana yardımcı olabilir olduğunu.

+0

Kontrolü Bu konuyu çekilebilir çizin lütfen http://stackoverflow.com/questions/10623570/how-to-programmatically-re-apply-a-9-patch-image-to -an-imageview –

cevap

19

Probleminiz biri böyle kontrol edebilirsiniz, senin Simge BitmapDrawable hiçbir örnek olmasıdır biri böyle bir şey yapmak gerekiyor) sizin durumda:

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

bu çözüm her durumda çalışacak

+0

iyi! bu iş! Teşekkürler! Yorum yapmak için –

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

Sen NinePatchDrawable (satır 4) içine simgesi döküm gerekiyor. biri sadece yayınlayabilmek için, bu durumda

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

çözüm doğru olurdu, ama değilse (ve bu:

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

Sorun:

bu deneyin: Sen BitmapDrawable Çözüm

NinePatchDrawable için typecasting çalışıyoruz

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 bir Drawable nesnesi döndürür. BitmapDrawable olmayabilir.

Bunu bir BitmapDrawable olup olmadığını test edebilirsiniz:

: Bir BitmapDrawable olmayan bir BitmapDrawable dönüştürmek istiyorsanız Sonra BitmapDrawable ...

mi

pm.GetApplicationIcon(packname) o zaman gerek

  • Değiştirilebilir bir bitmap oluşturun.
  • Canvas.DrawDrawable ile
+0

downvoter bakım? –

+1

Reddetmedim, ancak iletiyi görüyorum "getBitmap() yöntemi NinePatchDrawable türü için tanımlanmamış" –

İlgili konular