Я получаю исключение по Crashlytics для небольшого количества пользователей.Для большинства пользователей это работает нормально, но для некоторых это не получается (небольшое количество, но я сейчас только на стадии подготовки).Я думаю, что проблема может заключаться в том, что я уменьшаю растровое изображение, которое я использую в уведомлении, я использую этот код для его уменьшения:
bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
Исключение составляет следующее:
Fatal Exception: android.app.RemoteServiceException: Bad notification posted from package mypacakge: Couldn't inflate contentViewsjava.lang.IllegalArgumentException: The given region must intersect with the Bitmap's dimensions.
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1881)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6940)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Что я делаю не так?
Спасибо.
Редактировать: Я выполнил поиск кода Android, чтобы определить, кто выдает это исключение, и он выглядит как Palette
строитель, затем я искалкод, связанный с уведомлениями, который использует Palette
и метод setRegion()
и нашел это на MediaNotificationProcessor.java
:
Palette.Builder paletteBuilder = Palette.from(bitmap)
.setRegion(0, 0, bitmap.getWidth() / 2, bitmap.getHeight())
.clearFilters() // we want all colors, red / white / black ones too!
.resizeBitmapArea(RESIZE_BITMAP_AREA);
Palette palette = paletteBuilder.generate();
backgroundColor = findBackgroundColorAndFilter(palette);
// we want most of the full region again, slightly shifted to the right
float textColorStartWidthFraction = 0.4f;
paletteBuilder.setRegion((int) (bitmap.getWidth() * textColorStartWidthFraction), 0,
bitmap.getWidth(),
bitmap.getHeight());
if (mFilteredBackgroundHsl != null) {
paletteBuilder.addFilter((rgb, hsl) -> {
// at least 10 degrees hue difference
float diff = Math.abs(hsl[0] - mFilteredBackgroundHsl[0]);
return diff > 10 && diff < 350;
});
}
Так что я предполагаю, что здесь он передает какое-то плохое значение, но я понятия не имеюкакие.Я добавил еще несколько журналов для Fabric для этой ошибки, надеюсь, скоро я получу больше данных.