web-dev-qa-db-fra.com

android - Notification incorrecte publiée - Impossible d'étendre RemoteViews pour: StatusBarNotification

J'essaie de publier une notification avec un affichage personnalisé dans la zone de notification à partir d'un service IntentService et d'obtenir l'erreur «Ne peut pas émettre RemoteView».

Voici ce que je fais dans 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;

J'appelle notify () de OnHandleIntent () et annule les notifications dans OnDestroy ().

J'ai vérifié que ce code fonctionne dans une application indépendante, qui ne possède pas IntentService. Faire cela dans IntentService, c'est en quelque sorte causer des problèmes.

Quelqu'un pourrait-il s'il vous plaît expliquer ce que je fais mal?

Merci! 

39
Chaitanya

Pour moi, le problème était que je définissais une hauteur spécifique pour la mise en page racine, dans le fichier XML de vue de notification personnalisé.

Dès que j'ai changé:

Android: layout_height = "@ dimen/notification_expanded"

à 

Android: layout_height = "match_parent"

dans la présentation racine de la vue de notification, le problème était résolu. 

Jetez également un coup d'œil à cet exemple pour voir un exemple simple d'utilisation de la disposition personnalisée pour les notifications.

13
Iman Akbari

pour une raison inconnue, vous n'êtes pas autorisé à faire référence à dimention dans la vue racine de la vue distante personnalisée! vous devez donc le coder en dur comme Android:layout_height="64dp" mais si vous avez utilisé Android:layout_height="@dimen/notification_height_that_64", il vous donnera Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification. J'espère que ça va aider :)

10
M_AWADI

Dans mon cas, l'exception a été causée par une View régulière dans la présentation de notification personnalisée. En gros, c'est parce que vous n'êtes autorisé à utiliser que certains widgets tels que TextView, ImageView, etc.

9
Nikolai

Dans mon cas, j'ai pu corriger cette erreur en réduisant la taille de l'icône que je fournissais dans .setSmallIcon();

5
Ghanendra

Pour moi, le problème était d'avoir un élément View dans la présentation personnalisée définie pour la notification personnalisée. Le fait de supprimer l’élément View de la présentation a résolu le problème de la notification incorrecte publiée. 

Voici une liste de éléments de mise en page qui peuvent être utilisés si vous souhaitez créer une notification personnalisée à l'aide de RemoteView

Ni le projet de nettoyage ni la définition du layout_height en tant que match_parent n'ont fonctionné pour moi.

5
Reaz Murshed

J'ai eu la même erreur, mais le problème pour moi était la mise en page contrainte. Je l'ai changé en Relative Layout pour résoudre le problème.

3
Jeeva

J'ai eu le même problème. Dans mon cas:

raison -> J'ai utilisé pour la fonction builder.setAction (R.drawable.icon, ...) un vectordrawable et j'ai également essayé de les activer à partir du support lib mais rien n'a fonctionné Dans les systèmes Android récents, je ne vois pas les icônes d'action, dans les autres, cela donne cette erreur.

solution -> Je n'ai rien trouvé, la seule solution pour moi consiste à éviter les fichiers .xml pour les dessins et à utiliser les fichiers .png dans tous les répertoires hdpi mdpi ldpi ..

3
GabrieleG

La réponse de @ Nikolai m'a été utile, en fait c'était le problème ..__J'ai eu le même problème Certains contrôles peuvent être utilisés dans la notification. J'ai eu une vue dans ma mise en page pour notification comme ci-dessous.

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

Cela causait l'accident. Les mises en page et les contrôles suivants sont pris en charge:  enter image description here

Selon cette documentation officielle .

Je l'ai enlevé et cela a bien fonctionné. J'espère que ça aide quelqu'un.

1
Harry .Naeem

Je faisais face au même problème en montrant la mise en page personnalisée dans la notification et ce que j'ai trouvé est:

J'utilisais ConstraintsLayout comme une disposition racine de ma notification personnalisée, c'est l'erreur que je commettais. Comme il y a quelques limitations avec la disposition de contrainte à utiliser dans Android.

Finalement, j'ai changé ma mise en page racine en RelativeLayout et ma notification s'affiche parfaitement. J'ai joint ma vue en capture d'écran ci-dessous.

 enter image description here

0
Akshay Paliwal

Dans mon cas, le problème était une incohérence entre l'appel

setShowActionsInCompactView(0)

Et le .addAction appelle ... Le nombre d'actions était différent, d'où l'erreur

0
Teshte

Soyez prudent lorsque vous utilisez des dessins vectoriels. Sur les périphériques antérieurs à Lollipop, le fait de définir une icône via les méthodes NotificationCompat.Builder, telles que setSmallIcon, provoquera ce blocage. Vous obtiendrez le même plantage si vous utilisez des objets vectoriels Vector dans votre vue personnalisée.

0
a.ch.