Я вижу следующее исключение в журналах сбоев:
android.app.RemoteServiceException: Bad notification posted from package com.my.package: Couldn't create icon: StatusBarIcon(pkg=com.my.package user=0 id=0x7f02015d level=0 visible=true num=0 )
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1456)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5487)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Я отправляю свое Уведомление из IntentService из PendingIntent, установленного через AlarmManager, используя следующий метод. Все значения, переданные здесь, взяты из дополнительных пакетов в PendingIntent / IntentService.
/**
* Notification
*
* @param c
* @param intent
* @param notificationId
* @param title
* @param message
* @param largeIcon
* @param smallIcon
*/
public static void showNotification(Context c, Intent intent,
int notificationId, String title, String message, int largeIcon,
int smallIcon) {
PendingIntent detailsIntent = PendingIntent.getActivity(c,
notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// BUILD
NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
c);
// TITLE
mNotifyBuilder.setContentTitle(title).setContentText(message);
// ICONS
mNotifyBuilder.setSmallIcon(smallIcon);
if (Util.isAndroidOSAtLeast(Build.VERSION_CODES.HONEYCOMB)) {
Bitmap large_icon_bmp = ((BitmapDrawable) c.getResources()
.getDrawable(largeIcon)).getBitmap();
mNotifyBuilder.setLargeIcon(large_icon_bmp);
}
mNotifyBuilder.setContentIntent(detailsIntent);
mNotifyBuilder.setVibrate(new long[] { 500, 1500 });
mNotifyBuilder.setTicker(message);
mNotifyBuilder.setContentText(message);
// NOTIFY
NotificationManager nm = (NotificationManager) c
.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(notificationId, mNotifyBuilder.build());
}
Из того, что я видел из других ответов, - исключение, которое я вижу, происходит, когда setSmallIcon()
не вызывается должным образом.
Я проверил и дважды проверил правильность переданных идентификаторов ресурсов.
Ответы:
Что происходило, я включал целочисленную ссылку на значок в пакете PendingIntent, и это целое число позже использовалось при отправке в NotificationManager.
В промежутке между получением целочисленной ссылки и отключением ожидающего намерения приложение было обновлено, и все доступные для рисования ссылки изменились. Целое число, которое использовалось для ссылки на правильную возможность рисования, теперь ссылалось либо на неправильную возможность рисования, либо вообще на нее (вообще нет - вызывая этот сбой)
источник
bundle.putString("img", "my_image")
а затем преобразовать при необходимости в фактическое целое число @DrawableRes следующим образом:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
VectorXml
Известно, что использование внутри вашего уведомления вызывает эту проблему. Использовать pngисточник
drawable
папку и детские - х вdrawable-hdpi
,xhdpi
и т.д. Но не было для фотошопаdrawable-mdpi
, и он упал на MDPI устройства на размещение уведомления.У меня возникала одна и та же проблема каждый раз, когда я хотел показать уведомление на Kitkat. У меня возникла проблема из-за того, что я определил каждый значок в xml (из svg), а также маленький значок и значок действия. После того, как я заменил их на png, проблема решилась на моей стороне.
источник
android.app.RemoteServiceException: отправлено неверное уведомление
У меня была такая же проблема, но я решил. Моя проблема - ".xml файл" удаленного просмотра.
В моем xml-файле я был добавлен один
View
междуLinearLayout
разделителем for.Вышеупомянутый
View
компонент создает исключение недопустимого уведомления. Эта причина исключения - это только xml-файл Remoteviews.После удаления этого компонента View мой код работал без каких-либо исключений. Поэтому я почувствовал, что ящик уведомлений не принимает никаких настраиваемых представлений.
Таким образом, вы не рисуете ничего похожего на приведенное выше представление в XML-файле
RemoteView
объекта.источник
Моя проблема заключалась в том, что значок, который я использовал на
не было создано соответственно. Согласно официальному документу :
Итак, лучший способ выполнить вышеуказанное, я использовал генератор уведомлений, предоставленный Романом Нуриком на https://romannurik.github.io/AndroidAssetStudio/index.html
Таким образом, вы можете использовать изображение (с учетом того, что оно должно иметь прозрачный фон), и позволить генератору выполнять эту работу за вас, генерируя различные размеры для значков уведомлений.
Самым важным является то, что если генератор значков после просмотра изображения, которое вы собираетесь использовать, показывает вам белый заполненный круг или квадрат, с вашим изображением есть проблемы, возможно, потому, что оно не имеет прозрачности, поэтому убедитесь, что у тебя это нормально.
источник
drawable
папку и детские - х вdrawable-hdpi
,xhdpi
и т.д. Но не было для фотошопаdrawable-mdpi
, и он упал на MDPI устройства на размещение уведомления.В моем приложении такая ошибка возникает только во время обновления. Если идентификатор ресурса изменится в более новой версии, Android
RemoteView
может не найти ресурс и выбросить файлRemoteServiceException
. Если вы публикуете 3-ю версию и не меняете идентификатор ресурса, ошибки могут исчезнуть только временно .Можно уменьшить этот вид ошибок, отредактировав
res/values/public.xml
иres/values/ids.xml
. Компилятор сгенерирует индивидуальный идентификатор ресурса, если идентификатор ресурса не входит вpublic.xml
илиids.xml
. Когда вы меняете имя ресурса или добавляете новые ресурсы, идентификатор может измениться, и некоторые устройства могут не найти его.Итак, шаг следующий:
res/values
найдитеpublic.xml
иids.xml
public.xml
иids.xml
подres/values
в исходном коде и вставьте строки у только что скопированныеПримечание:
Gradle 1.3.0 и выше игнорируют локальный
public.xml
. Чтобы он работал, вам нужно добавить скрипт в свойbuild.gradle
Примечание. Этот сценарий не поддерживает проект подмодулей. Я пытаюсь это исправить.
источник
У вас есть такой же значок
и вы уведомление
источник
На всякий случай иконка не важна, можно заменить,
к
Это работает!
источник
У меня было исключение RemoteServiceException, когда использование Notification в моем классе расширяется от FirebaseMessagingService. Я добавил в AndroidManifest.xml следующий код:
Также ресурс ic_small устанавливается в экземпляре класса Notification.Builder методом setSmallIcon (значок int).
источник
В Android Studio версии 3.0.0 и выше при добавлении нового изображения в папку drawables выберите drawable вместо drawable-v24.
Если изображение, которое вы используете, уже существует (v24), просто скопируйте его и вставьте в тот же каталог (например, чертежи). На этот раз он спросит вас, какой обычный или v24 - просто убедитесь, что это не v24, и попробуйте снова, это должно исправить ошибку.
источник
Та же проблема случилась и со мной, и я решил то же самое
ПРИЧИНА : это происходит из-за того, что мы используем векторную отрисовку для RemoteViews, а векторная отрисовка генерирует отрисовку во время компиляции. Также я не уверен, почему некоторые устройства не могут обнаружить сгенерированный идентификатор ресурсов для рисования, пока мы увеличиваем приложение. Но да, это была причина.
ВОСПРОИЗВЕДЕНИЕ Шаги 1. Установите предыдущую сборку. 2. Отправьте уведомление 3. Обновите сборку кодом следующей версии 4. После обновления приложения не открывайте приложение и не отправляйте уведомление повторно.
РЕШЕНИЕ Замените векторный файл с возможностью рисования обычным файлом (.png или .jpg) с возможностью рисования.
Надеюсь, это решит проблему.
источник
Если во время обновления вашего приложения отображается уведомление, вы можете столкнуться с этим. Что вам может понадобиться сделать, так это создать BroadcastReceiver, который ожидает сообщения PACKAGE_CHANGED, после чего вы завершите работу всех своих служб, которые также отклонят связанные с ними уведомления.
источник
У меня была такая же проблема, когда я установил уведомление в пакете. Я попробовал это, и это решило мою проблему:
Убедитесь, что setLargeIcon () вызывается до setSmallIcon ().
источник
У меня тоже была такая же проблема. Проблема в значке, который вы используете, я использовал android.R.drawable.stat_sys_download. Перейдите в файл drawables.xml и вставьте его.
а затем в вашем коде
Вы можете попробовать другое изображение вместо этого изображения
источник
Мой способ решить эту проблему: у меня были "плохие" представления в моем макете (например, флажок), поэтому я удалил их.
RemoteViews, похоже, поддерживают только изображения и тексты (для подтверждения при чтении документа).
источник
У меня было исключение RemoteServiceException при использовании android.support.constraint.ConstraintLayout. Измените его на LinearLayout или Relative, а также на android: layout_height = "wrap_content" для контейнера.
источник
(это не решение текущего вопроса, но помогает кому-то с аналогичной основной проблемой) У меня тоже была такая же проблема, но в моем случае я использовал поврежденный файл .png, который вызывает ту же проблему. Я удалил его и снова включил правильный файл .png.
источник
Замените
<android.support.v7.widget.AppCompatTextView
на<TextView
из настраиваемого макета уведомлений.Потому что
android.support.v7.widget.AppCompatTextView
илиandroid.support.v7.widget.AppCompatImageView
работает только во время выполнения.Так что используйте
TextView
илиImageView
источник
Если кто-то все еще сталкивается с этой проблемой: добавьте файл png в свою папку с возможностью переноса с именем ic_stat_ic_notification (или любым другим именем, которое вам нравится)
и в вашем манифесте добавьте пару строк ниже
и вы можете создавать свои значки здесь -> https://romannurik.github.io/AndroidAssetStudio/icon
источник
Синхронизируйте проект, а затем очистите его, затем выберите File> Synchronize: Build> Clean Project.
Я надеюсь, что это поможет вам всем, это работает для меня
источник
Я получил эту ошибку из-за автосылки и параметров linksClickable в текстовом представлении в представлении уведомлений:
Быть осторожен!
источник
Это сработало для меня. Прокомментируйте ссылку на значок и, таким образом, сможете без проблем использовать NotificationCompat.Builder.
источник