Je vois l'exception suivante dans les journaux de crash:
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)
Je publie ma notification d'un IntentService à partir d'un PendingIntent défini via AlarmManager en utilisant la méthode suivante. Toutes les valeurs transmises ici proviennent des extras du bundle dans 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());
}
D'après ce que j'ai vu d'autres réponses - l'exception que je vois se produit quand elle setSmallIcon()
n'est pas appelée correctement.
J'ai vérifié et vérifié que les ID de ressource transmis sont tous corrects.
Réponses:
Ce qui se passait, c'est que j'incluais la référence entière à l'icône dans le bundle PendingIntent, et cet entier a ensuite été référencé lors de sa publication dans le NotificationManager.
Entre l'obtention de la référence entière et le déclenchement de l'intention en attente, l'application a été mise à jour et toutes les références pouvant être dessinées ont été modifiées. L'entier qui faisait référence au dessinable correct faisait désormais référence au dessinable incorrect ou nul du tout (aucun du tout - provoquant ce plantage)
la source
bundle.putString("img", "my_image")
puis de le convertir si nécessaire en entier @DrawableRes réel comme suit:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
L'utilisation à l'
VectorXml
intérieur de votre notification est connue pour causer ce problème. Utiliser les pngla source
drawable
dossier et png dansdrawable-hdpi
,xhdpi
etc. Mais il n'y avait pas .png pourdrawable-mdpi
, et se sont écrasés sur IPSM dispositif affichant une notification.J'ai eu le même problème à chaque fois que je voulais afficher une notification sur Kitkat. Ce qui a causé le problème pour moi, c'est que j'ai défini chaque icône en xml (à partir de svg), la petite icône et l'icône d'action également. Après les avoir remplacés par png-s, le problème s'est résolu à mes côtés.
la source
android.app.RemoteServiceException: mauvaise notification publiée
J'ai eu le même problème, mais j'ai été résolu. Mon problème est "fichier .xml" de la vue à distance.
Dans mon fichier xml, j'ai été ajouté un
View
entre leLinearLayout
diviseur for.Le
View
composant ci-dessus créant l'exception de notification incorrecte. Cette raison d'exception est uniquement un fichier xml de Remoteviews.Après avoir supprimé ce composant View, Mon code s'est exécuté correctement, sans aucune exception. J'ai donc senti que le tiroir de notification n'acceptait aucune vue personnalisée.
Donc, vous ne dessinez rien comme la vue ci-dessus dans le fichier .xml de l'
RemoteView
objet.la source
Mon problème était que l'icône que j'utilisais
n'a pas été généré en conséquence. Selon la doc officielle :
Donc, la meilleure façon de remplir ce qui précède, j'ai utilisé le générateur de notifications fourni par Roman Nurik sur https://romannurik.github.io/AndroidAssetStudio/index.html
De cette façon, vous pouvez utiliser une image (en tenant compte du fait qu'elle doit avoir un arrière-plan transparent) et laisser le générateur faire le travail à votre place en générant les différentes tailles pour les icônes de notification.
La chose la plus importante est que si le générateur d'icônes après avoir parcouru l'image que vous allez utiliser vous montre un cercle ou un carré rempli de blanc, il y a des problèmes avec votre image, peut-être parce qu'elle n'a pas de transparents, alors assurez-vous que vous avez ça ok.
la source
drawable
dossier et png dansdrawable-hdpi
,xhdpi
etc. Mais il n'y avait pas .png pourdrawable-mdpi
, et se sont écrasés sur IPSM dispositif affichant une notification.Dans mon application, ce type de bogue se produit uniquement lors de la mise à niveau. Si l'ID de ressource change dans la version la plus récente, Android
RemoteView
peut ne pas trouver la ressource et supprimer le fichierRemoteServiceException
. Si vous publiez une 3ème version et ne modifiez pas l'ID de la ressource, les bogues peuvent ne disparaître que temporairement .Il est possible de réduire ce genre de bugs en éditant
res/values/public.xml
etres/values/ids.xml
. Le compilateur générera un identifiant de ressource individuel si l'identifiant de ressource n'est pas danspublic.xml
ouids.xml
. Lorsque vous modifiez le nom de la ressource ou ajoutez de nouvelles ressources, l'identifiant peut changer et certains appareils peuvent ne pas le trouver.Donc, l'étape est la suivante:
res/values
recherchez lepublic.xml
etids.xml
public.xml
etids.xml
sousres/values
dans votre code source et collez les lignes que vous venez de copierRemarque:
Gradle 1.3.0 et supérieur ignorent le local
public.xml
. Pour que cela fonctionne, vous devez ajouter un script dans votrebuild.gradle
Remarque: ce script ne prend pas en charge le projet de sous-modules. J'essaye de le réparer.
la source
Vous avez passé la même icône
et vous notification
la source
Juste au cas où l'icône n'est pas importante, vous pouvez la remplacer,
À
Cela marche!
la source
J'avais RemoteServiceException lorsque l'utilisation de la notification dans ma classe s'étend de FirebaseMessagingService. J'ai ajouté le code suivant à AndroidManifest.xml:
Également la ressource ic_small définie dans l'instance d'une classe Notification.Builder par la méthode setSmallIcon (icône int).
la source
Dans Android Studio version 3.0.0 et supérieure, lors de l'ajout d'une nouvelle image dans le dossier drawables, choisissez drawable au lieu de drawable-v24.
Si l'image que vous utilisez est déjà lue (v24), copiez-la et collez-la dans le même répertoire (par exemple, drawables). Cette fois, il vous demandera quelle version régulière ou v24 - assurez-vous simplement que ce n'est pas la v24 et réessayez, cela devrait corriger l'erreur.
la source
Le même problème est arrivé avec moi aussi et j'ai résolu le même
RAISON : Cela se produit parce que nous utilisons des vecteurs dessinables pour RemoteViews et que les vecteurs dessinables génèrent des dessinables au moment de la compilation. De plus, je ne sais pas pourquoi certains appareils ne sont pas en mesure de détecter l'ID de ressources dessinables généré pendant que nous augmentons l'application. Mais oui, c'était la raison.
REPRODUIRE Étapes 1. Installez la version précédente. 2. Envoyez une notification 3. Mettez à jour la version avec le code de version suivant 4. Après la mise à jour de l'application, n'ouvrez pas l'application et n'envoyez pas de notification à nouveau
SOLUTION Remplacez le vecteur dessinable par un fichier dessinable normal (.png ou .jpg).
J'espère que cela résout le problème.
la source
Si vous avez une notification visible pendant que votre application est mise à jour, vous risquez de rencontrer cela. Ce que vous devrez peut-être faire est de créer un BroadcastReceiver qui attend un message PACKAGE_CHANGED, à quel point vous arrêtez tous vos services, ce qui rejettera également les notifications associées.
la source
J'ai eu le même problème lorsque j'ai défini une notification dans un paquet. J'ai essayé ceci et cela a résolu mon problème:
Assurez-vous que setLargeIcon () est appelé avant setSmallIcon ().
la source
J'ai aussi eu le même problème. Le problème vient de l'icône que vous utilisez, j'utilisais android.R.drawable.stat_sys_download. Accédez à drawables.xml et collez-le.
puis dans ton code
Vous pouvez essayer une autre image au lieu de cette image
la source
Ma façon de résoudre ceci: j'avais de «mauvaises» vues dans ma mise en page (ex: une case à cocher) - donc je les ai supprimées.
RemoteViews semble ne prendre en charge que les images et les textes (à confirmer en lisant le document).
la source
J'ai eu RemoteServiceException lorsque j'utilise android.support.constraint.ConstraintLayout. Changez-le en LinearLayout ou Relative et aussi android: layout_height = "wrap_content" pour le conteneur
la source
(ce n'est pas une solution pour la question actuelle mais aide quelqu'un avec un problème de base similaire) J'ai aussi eu le même problème, mais dans mon cas, j'ai utilisé un fichier .png corrompu qui cause le même problème. Je l'ai donc supprimé et réintégré le fichier .png correct.
la source
Veuillez remplacer
<android.support.v7.widget.AppCompatTextView
par<TextView
de la mise en page de notification personnalisée.Parce que
android.support.v7.widget.AppCompatTextView
ouandroid.support.v7.widget.AppCompatImageView
ne fonctionne qu'au moment de l'exécution.Alors utilisez
TextView
ouImageView
la source
Si quelqu'un est toujours confronté à ce problème: ajoutez un fichier png dans votre dossier dessinable avec le nom ic_stat_ic_notification (ou tout autre nom que vous aimez)
et dans votre manifeste, ajoutez ci-dessous quelques lignes
et vous pouvez créer vos icônes ici -> https://romannurik.github.io/AndroidAssetStudio/icon
la source
Synchronisez le projet et ensuite Nettoyez-le, Fichier> Synchroniser puis: Construire> Nettoyer le projet
J'espère que cela vous aidera tous, c'est du travail pour moi
la source
J'ai eu cette erreur en raison des options de liaison automatique et de liens cliquables dans la vue de texte dans la vue de notification:
Faites attention!
la source
Cela a fonctionné pour moi. Commentez la référence de l'icône et ainsi pouvoir utiliser le NotificationCompat.Builder sans problème.
la source