2013-08-27 11 views
11

インストールされたアプリケーションアイコンを取得しようとしているときにjava.lang.ClassCastExceptionがあります。Androidにインストールされているすべてのアプリケーションアイコンを取得:java.lang.ClassCastException

ここに私のコードです。

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

で、LogCatに示すエラーが

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

ホープ誰もが私を助けることができるです。

+0

で描画可能に描画してくださいhttp://stackoverflow.com/questions/10623570/how-to-programmatically-re-apply-a-9-patch-image-to -an-imageview –

答えて

19

あなたの問題は、一つには、そのようにチェックすることができ、あなたのアイコンがBitmapDrawableのインスタンスではないということです

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

このソリューションはどのような場合

+0

良い!この作品!ありがとう! –

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

アイコンをNinePatchDrawable(行4)にキャストする必要があります。 1はそれをキャストすることができ、この場合は

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

あなたのソリューションは、右のだろう、そうでない場合(及びこと:

0
Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 
に動作します:あなたのケースは、1つのそのような何かをする必要があります)です

問題:

はこれを試してください:あなたはBitmapDrawableソリューション

NinePatchDrawableに型キャストしようとしている

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.GetApplicationInfoDrawableオブジェクトを返します。 BitmapDrawableではない可能性があります。

あなたはそれが持つBitmapDrawableあるかどうかをテストすることができます:

:あなたはBitmapDrawableに非Bi​​tmapDrawableを変換したい場合は、BitmapDrawable ...

です

pm.GetApplicationIcon(packname)ならば、あなたがする必要があります

  • 可変ビットマップを作成します。
  • このトピックをチェックCanvas.DrawDrawable
+0

コメントを投稿するには? –

+1

私はdownvoteをしませんでしたが、 "メソッドgetBitmap()はNinePatchDrawable型の定義されていません"というメッセージが表示されます。 –

関連する問題