У нас много сбоев, характерных для телефонов Xiaomi на Android 6 и 7:
Fatal Exception: android.app.RemoteServiceException: Bad notification posted from package x.y.z: Couldn't create icon: StatusBarIcon(icon=Icon(typ=RESOURCE pkg=x.y.z id=0x7f0200ad) visible user=0 )
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1715)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6358)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
Я нашел много похожих сообщений о сбоях и статей в сети.Вот некоторые из них:
Как исправить: android.app.RemoteServiceException: Плохое уведомление отправлено из пакета *: Не удалось создать значок: StatusBarIcon
https://medium.com/@Miqubel/the-story-of-a-hard-to-fix-bug-ac6ed819cb49
Но разница в том, что у нас есть эти проблемы только на телефонах Xiaomi (Android 6 и 7) и, вероятно, не во время обновлений, поскольку одни и те же пользователи несколько раз сталкивались с сбоем в одной и той же версии выпуска.* Интересно, что я не смог найти ничего в сети по этому конкретному случаю, и у нас нет телефонов Xiaomi.
Я установил уведомление примерно так:
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, importance);
notificationChannel.enableLights(true);
notificationManager.createNotificationChannel(notificationChannel);
}
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setContentText(body == null ? "" : body)
.setAutoCancel(true)
.setContentIntent(PendingIntent.getActivity(
context,
0,
pendingIntent,
PendingIntent.FLAG_UPDATE_CURRENT
));
Мытакже есть уведомления Facebook, которые должны быть установлены аналогичным образом, но в другом классе уведомлений.Я не знаю, имеет ли это отношение.Кто-нибудь сталкивался с этим или имел какие-либо рекомендации, как это исправить, кроме оборачивания методов setSmallIcon и / или setLargeIcon в проверку версии производителя и Android?
РЕДАКТИРОВАТЬ: я не смог найти решение, но здесьВот несколько новых мыслей:
Мы выпустили новую версию, но исключение пользователей Xiaomi из уведомления не помогло!Теперь я думаю, что проблема вызвана пользовательским кодом в ActivityThread.java.MIUI, вероятно, запускает отсюда уведомление о каком-либо событии.Здесь есть несколько десятков событий на складе Android, но ни одно из них не выдает уведомления.Но что-то не так с нашими иконками, поэтому они вылетают.
Но что не так с нашими иконками?У нас есть ic_notification, которая, вероятно, не используется для этого.С другой стороны, ic_launcher - это мип-карта.Может быть это так?Но я не смог найти никаких проблем, касающихся Xiaomi и mipmaps.
В отчете о сбое всегда упоминается один и тот же идентификатор ресурса в нескольких версиях приложения: 0x7f0200ad.Это особенное по какой-то причине?Как я могу перепроектировать наше приложение, чтобы получить имя ресурса для этого?
РЕДАКТИРОВАТЬ 2:
- Я перепроектировал приложение с помощью apktool, но ресурсid отсутствует в public.xml, что, по-видимому, эквивалентно R.java.Наши ic_notification и ic_launcher находятся в списке с другим идентификатором.Так это системный ресурс, который MIUI не может найти?
РЕДАКТИРОВАТЬ 3:
- Первые свидетельства того, что у других возникла та же проблема:
https://xiaomi.eu/community/threads/miui-9.47247/
- Временное решение найдено на польском форуме:
https://pl.forum.elvenar.com/index.php?threads/problem-z-uruchomieniem-23566.3348/
Последний комментарий означает: «У нас есть временное решениек проблеме с Xiaomi, попробуйте отключить уведомления принудительно из приложения Elvenar в настройках телефона. После перезапуска приложения ошибка должна исчезнуть. "
РЕДАКТИРОВАТЬ 4:
Мы используемShortcutBadger (версия 1.1.13).Здесь говорится, что мы должны использовать другой метод для значков Xiaomi:
https://github.com/leolin310148/ShortcutBadger/wiki/Xiaomi-Device-Support
Сразу после версии 1.1.13 они удалили поддержку по умолчанию для Xiaomi, и вы должны использовать уведомление из приведенного вышессылка.
Кто-нибудь еще пострадал использовать это?