android.graphics.drawable.AdaptiveIconDrawable не может быть приведен к ошибке android.graphics.drawable.BitmapDrawable - PullRequest
0 голосов
/ 28 апреля 2018

Я получаю эту ошибку при попытке реализовать адаптивные значки, когда мое приложение падает при запуске.

Я не могу себе представить, почему я получаю эту ошибку, потому что в файлах, упомянутых в журнале ошибок ниже (MainActivity и BaseActivity), я не использую AdaptiveIconDrawable и BitmapDrawable.

2018-04-28 16:50:17.014 31282-31282/de.markustippner.wondermusic2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.markustippner.wondermusic2, PID: 31282
    java.lang.RuntimeException: Unable to start activity ComponentInfo{de.markustippner.wondermusic2/de.markustippner.wondermusic2.activities.MainActivity}: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3027)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:101)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:73)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1786)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
     Caused by: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
        at com.afollestad.appthemeengine.ATE.applyTaskDescription(ATE.java:259)
        at com.afollestad.appthemeengine.ATE.preApply(ATE.java:128)
        at com.afollestad.appthemeengine.ATEActivity.onCreate(ATEActivity.java:22)
        at de.markustippner.wondermusic2.activities.BaseActivity.onCreate(BaseActivity.java:44)
        at de.markustippner.wondermusic2.activities.MainActivity.onCreate(MainActivity.java:137)
        at android.app.Activity.performCreate(Activity.java:7117)
        at android.app.Activity.performCreate(Activity.java:7108)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1262)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2867)

Самое смешное в этом сообщении об ошибке: когда я удаляю папку «mipmap-anydpi-v26», мое приложение больше не падает, но тогда Adaptive Icons не работают ...

Строки, в которых выдается ошибка, в обоих случаях:

super.onCreate(savedInstanceState);

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

В файле ATE.java реализовать это

@NonNull
static private Bitmap getBitmapFromDrawable(@NonNull Drawable drawable) {
    final Bitmap bmp = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(bmp);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);
    return bmp;
}

и изменить

if (icon == null)
        icon = ((BitmapDrawable) activity.getApplicationInfo().loadIcon(activity.getPackageManager())).getBitmap();

до

if (icon == null)
        icon = getBitmapFromDrawable(activity.getApplicationInfo().loadIcon(activity.getPackageManager()));
0 голосов
/ 29 марта 2019

Я также сталкиваюсь с той же ошибкой. Это связано с ic_launcher созданием автоматически AdaptiveIcon. Я просто удаляю адаптивный icon(ic_launcher.xml) и запускаю, чтобы он работал.

0 голосов
/ 28 апреля 2018

Похоже, вы используете App Theme Engine , который пытается использовать значок вашего приложения в качестве растрового изображения. Но начиная с Android 8.0 вы можете установить адаптивную иконку, которая не является растровым изображением, поэтому на ней вылетает App Theme Engine.

Об этой проблеме сообщили здесь , но она еще не исправлена ​​(и, вероятно, не будет исправлена, так как не видела обновлений в течение двух лет).

Возможно, вы сможете исправить это самостоятельно, разветвив проект и изменив проблемную часть так, чтобы не требовался значок растрового изображения. Или, в качестве альтернативы, используйте другой движок тем.

...