Подтвердить что ты не робот

Android - отправлено плохое уведомление - не удалось расширить RemoteViews для: StatusBarNotification

Я пытаюсь опубликовать уведомление с пользовательским представлением в области уведомлений от IntentService и получаю Couldn't expect RemoteView об ошибке Couldn't expect RemoteView " Couldn't expect RemoteView.

Вот что я делаю в onCreate():

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
icon = R.drawable.icon;
tickerText = "data upload in progress";
contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notiflayout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, "Hello");
contentView.setProgressBar(R.id.progressBar, 100, 10, false);
whatNext = PendingIntent.getActivity(getApplicationContext(), 0, new Intent(getApplicationContext(), starterActivity.class), 0);
notification = new Notification(icon, tickerText, System.currentTimeMillis());
notification.contentView = contentView;
notification.contentIntent = whatNext;

Я onHandleIntent() notify() из onHandleIntent() и отменяю уведомления в onDestroy().

Я проверил, что этот код работает в независимом приложении, которое не имеет IntentService. Выполнение этого в IntentService как-то доставляет проблемы.

Может кто-нибудь объяснить, что я делаю не так?

Спасибо!

4b9b3361

Ответ 1

Ну, ошибка произошла из-за исключения ResourceNotFound. Я получал сообщение "не могу раздуть вид для уведомления".

Я продолжал копать, и, следуя советам здесь, исправил мою проблему. Я переименовал drawable-mdpi в удобочитаемый.

И, убедившись, что код работал, я изменил имя папки обратно на drawable-mdpi. Вещи все еще работают, заставляя меня поверить, что "Чистый проект", за которым следует Build, устранил бы проблему.

Надеюсь, что это поможет.

Ответ 2

Для меня проблема заключалась в том, что я устанавливал определенную высоту для корневого макета в файле XML файла пользовательского уведомления.

Как только я изменил:

Android: layout_height = "@DIMEN/notification_expanded"

to

Android: layout_height = "match_parent"

в корневом расположении уведомления, проблема была решена.

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

Ответ 3

по неизвестной причине вам не разрешено ссылаться на размер в корневом представлении пользовательского удаленного представления! поэтому вам нужно жестко закодировать его как android:layout_height="64dp", но если вы использовали android:layout_height="@dimen/notification_height_that_64", он даст вам Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification. я надеюсь, что это поможет:)

Ответ 4

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

Ответ 5

Для меня проблема заключалась в наличии элемента View в пользовательском макете, настроенном для пользовательского уведомления. Удаление элемента View из макета решило проблему публикации плохого уведомления.

Вот список элементов макета, которые можно использовать, если вы хотите создать собственное уведомление с помощью RemoteView.

Ни очистка проекта, ни установка layout_height качестве match_parent мне.

Ответ 6

В моем случае я смог исправить эту ошибку, уменьшив размер значка, который я предоставлял в .setSmallIcon();

Ответ 7

У меня была та же проблема. В моем случае:

reason → Я использовал для builder.setAction(R.drawable.icon,...) функцию vectordrawable, и я попытался также включить их из lib, но ничего не получилось. В последних системах Android я не вижу иконки действий, а в других - эту ошибку.

solution → Я ничего не нашел, единственное решение для меня - избежать .xml файлов для drawables и использовать .png файлы во всех каталогах hdpi mdpi ldpi..

Ответ 8

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

Ответ 9

@Nikolai ответ был полезен для меня, действительно, это была проблема. Я была такая же проблема. Существуют определенные элементы управления, которые можно использовать в уведомлении. У меня был вид в моем макете для уведомления, как показано ниже.

<View
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.04"/>

Это было причиной аварии. Поддерживаются следующие макеты и элементы управления: enter image description here

Согласно этой официальной документации.

Я удалил его, и он работал нормально. Надеюсь, это поможет кому-то.

Ответ 10

Будьте осторожны при использовании векторных рисунков. На устройствах до Lollipop установка значка с помощью методов NotificationCompat.Builder, таких как setSmallIcon, вызовет этот сбой. Вы получите тот же сбой, если будете использовать векторные рисунки в своем пользовательском представлении.

Ответ 11

Я столкнулся с той же проблемой при отображении пользовательского макета в уведомлении, и я нашел следующее:

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

Наконец, я изменил свой корневой макет на RelativeLayout, и мое уведомление отображается отлично. Я приложил свой взгляд на скриншоте ниже.

enter image description here

Ответ 12

В моем случае проблема заключалась в несоответствии между вызовами

setShowActionsInCompactView(0)

И .addAction вызывает... Количество действий было другим, следовательно ошибка

Ответ 13

я вижу много проблем, связанных с этой темой, в моем случае эта проблема была вызвана использованием

android:background="?attr/selectableItemBackground" 

я использовал это на моем ImageButton и каждый раз, когда мое приложение разбилось, но когда я снял его, все было хорошо, я думаю, проблема в том, вы не должны использовать какой - либо пользовательские View тип или любые темы атрибуты ваших взглядов, я надеюсь, что это поможет другим застревает с этой проблемой

Ответ 14

Как правило, эта ошибка означает, что ваш contentView является ошибкой, проверьте это! возможно, вам лучше заменить свой контентный вид макетом, содержащим TextView only.Ok, запустить его, надеяться на помощь для вас.