Comment réparer: android.app.RemoteServiceException: Bad notification affichée à partir de l'emballage *: impossible de créer une icône: StatusBarIcon
Je vois l'exception suivante dans les journaux des incidents:
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 poste ma Notification d'un IntentService à partir d'un PendingIntent réglée via le AlarmManager à l'aide de la méthode suivante. Toutes les valeurs passées en voici du bundle extras dans le 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());
}
De ce que j'ai vu d'autres réponses - à l'exception, j'en vois qui se passe quand setSmallIcon()
ne s'appelle pas correctement.
J'ai vérifié et revérifié que l'Id de Ressource étant passé sont tous corrects.
- Je suis en train de vivre la même erreur (les rapports de plantage à partir d'un live app). Je ne peux pas le reproduire sur mon appareil. Je suis en train de penser que c'est parce que les gens modifié le .apk
- Les gars, comment puis-je résoudre ce problème. J'utilise le format png, mais très rarement application se bloque
Vous devez vous connecter pour publier un commentaire.
Ce qui se passait, je n'avais compris la référence d'entier de l'icône dans le PendingIntent bundle, et ce nombre entier plus tard a été référencé, tout en étant posté à l'NotificationManager.
Entre l'obtention de l'entier de référence et dans l'attente de l'intention à l'aller, l'application a été mise à jour et l'ensemble de la drawable références changé. Le nombre entier utilisé pour faire référence à la bonne drawable maintenant référencé, soit de la mauvaise drawable ou aucun) (aucun) - à l'origine de ce crash)
bundle.putString("img", "my_image")
et ensuite de les convertir si nécessaire, de la réelle @DrawableRes entier comme suit:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
À l'aide de
VectorXml
à l'intérieur de votre notification a été connu pour causer ce problème. Utilisez le format png estdrawable
dossier et de la png dansdrawable-hdpi
,xhdpi
, etc. Mais il n'y avait pas le format png pourdrawable-mdpi
, et il s'est écrasé sur MDPI appareil sur la publication d'une notification.J'ai eu le même problème à chaque fois quand j'ai voulu afficher une notification sur Kitkat. Ce qui a causé le problème pour moi est que j'ai défini chaque icône en xml (à partir de svg), la petite icône et l'icône d'action aussi. Après j'ai remplacé par des png-s le problème a été résolu lors de mon côté.
android.app.RemoteServiceException: Bad notification posté
J'ai eu le même problème, mais j'ai été résolus. Mon problème est ".le fichier xml" de vue à Distance.
Dans mon fichier xml, j'ai été ajoutés un
View
entre lesLinearLayout
pour diviseur.Ci-dessus
View
composante de la création de la Mauvaise notification d'exception. Cette Exception raison est seul fichier xml de Remoteviews.Après le retrait de ce point de Vue composant, Mon code est exécutée correctement, sans aucune exception. Alors j'ai senti que la Notification tiroir de ne pas accepter une quelconque des vues personnalisées.
Afin de ne pas tirer quelque chose comme ci-dessus dans la vue d' .fichier xml de
RemoteView
objet.Dans mon application, ce genre de bug ne se produit que lors de la mise à niveau. Si l'id de la ressource changements dans la nouvelle version, Android
RemoteView
peut ne pas trouver la ressource et de jeter leRemoteServiceException
. Si vous publiez une 3e version et de ne pas modifier l'id de la ressource, les bugs peuvent disparaître seulement temporairement.Il est possible de réduire ce genre de bugs par l'édition
res/values/public.xml
etres/values/ids.xml
. Le compilateur va générer une ressource individuelle identifiant si l'id de la ressource n'est pas danspublic.xml
ouids.xml
. Lorsque u modifier le nom de la ressource ou en ajouter de nouvelles ressources, l'id peut changer et certains appareils peuvent ne parviennent pas à le trouver.Si l'étape est le suivant:
res/values
trouver lepublic.xml
etids.xml
public.xml
etids.xml
sousres/values
dans votre code source, et collez les lignes de u juste copiéRemarque:
Gradle 1.3.0 et au-dessus ignorer les locaux
public.xml
. Pour le faire fonctionner, u besoin d'ajouter un script dans votrebuild.gradle
Note:
Ce script ne prend pas en charge submodules projet. Je suis en train de le fixer.
Mon problème était que l'icône que j'utilisais sur
n'était pas généré en conséquence. Selon le officiel doc:
Donc, la meilleure façon de remplir la ci-dessus, j'ai utilisé Générateur de notifications fournis par Roman Nurik sur https://romannurik.github.io/AndroidAssetStudio/index.html
De cette façon, vous pouvez utiliser une image (tenant compte de ce que cela a à avoir un fond transparent) et de laisser le générateur de faire le travail pour vous de générer les différentes tailles pour les icônes de notification.
La chose la plus importante est que si l'icône générateur d'après vous naviguez sur l'image que vous allez utiliser, vous montre un blanc rempli de cercle ou un carré, il y a des problèmes avec votre image, peut-être parce qu'il n'a pas de transparents, alors assurez-vous que vous a ce ok.
drawable
dossier et de la png dansdrawable-hdpi
,xhdpi
, etc. Mais il n'y avait pas le format png pourdrawable-mdpi
, et il s'est écrasé sur MDPI appareil sur la publication d'une notification.Vous avez passer même icône
et vous notification
J'avais RemoteServiceException lors de l'utilisation de Notification dans ma classe s'étend de FirebaseMessagingService. J'ai ajouté le code suivant AndroidManifest.xml:
Aussi ressources ic_small mis en instance d'une classe de Notification.Constructeur par la méthode setSmallIcon(int icône).
Dans Android Studio version 3.0.0 et au-dessus, lors de l'ajout d'une nouvelle image dans l'un drawable dossier de choisir drawable au lieu de drawable-v24.
Si l'image que vous utilisez, est alread un (v24) il suffit de le copier et de le coller dans son répertoire (par exemple. un drawable). Cette fois, il va vous demander quelle réguliers ou v24 - assurez-vous simplement que ce n'est pas la v24 et essayez à nouveau, cela devrait résoudre l'erreur.
Même question s'est passé avec moi aussi et j'ai résolu le même
RAISON: Cela se passe parce que nous sommes à l'aide de vecteur dessiné pour RemoteViews et de vecteur dessiné génère drawable au moment de la compilation. Aussi, je ne suis pas sûr de savoir pourquoi certains appareils ne sont pas en mesure de détecter l'généré drawable ressources id alors que nous sommes en améliorer l'application. Mais oui, c'était la raison.
REPRODUIRE
Étapes
1. Installer la version précédente.
2. Envoyer une notification
3. Mise à jour le construire avec la prochaine version de code
4. Après la mise à jour de l'application, ne pas ouvrir l'application et envoyer une notification de nouveau
SOLUTION
Remplacer le vecteur dessinés à la normale drawable(.png ou .jpg fichier.
J'espère que cela résout le problème.
J'ai eu le même problème lorsque j'ai mis un avis dans un bundle.
J'ai essayé et ça a résolu mon problème:
Assurez-vous que setLargeIcon() invoquée avant setSmallIcon().
J'ai moi aussi eu le même problème. Le problème avec l'icône que vous utilisez, j'ai été en utilisant android.R.drawable.stat_sys_download. Aller à drawables.xml et collez cette.
et puis dans votre code
Vous pouvez essayer une autre image à la place de cette image
Ma façon de résoudre ce problème: j'ai eu la "mauvaise" vues dans ma mise en page (ex: une case à cocher) - donc je les ai retirées.
RemoteViews semblent appuyer uniquement les images et les textes (à confirmer par la lecture de la doc).
J'avais RemoteServiceException lors de l'utilisation d'android.de soutien.la contrainte.ConstraintLayout. Changer de LinearLayout ou d'un Parent
et aussi android:layout_height="wrap_content" pour conteneur
(ce n'est pas la solution pour la question en cours, mais aide à quelqu'un ayant les mêmes cœur de la question) j'ai moi aussi eu le même problème, Mais dans mon cas, j'ai utilisé corrompu .fichier png qui est à l'origine même problème. Donc je l'ai supprimé et re-inclus correcte .fichier png.
Veuillez remplacer
<android.support.v7.widget.AppCompatTextView
avec<TextView
de la coutume de notification de mise en page.Parce que
android.support.v7.widget.AppCompatTextView
ouandroid.support.v7.widget.AppCompatImageView
ne fonctionne que lors de l'exécution.Donc Utiliser
TextView
ouImageView
Si quelqu'un toujours confronté à ce problème :
Ajouter un fichier png dans votre dossier drawable avec le nom ic_stat_ic_notification (ou tout autre nom u comme )
et dans votre manifeste, ajouter ci-dessous quelques lignes
et u pouvez créer vos icônes sur ici - >
https://romannurik.github.io/AndroidAssetStudio/icon
Juste au cas où l'icône n'est pas important, vous pouvez le remplacer,
À
Cela fonctionne!
Synchrinize le projet et de le Nettoyer,
Fichier > Synchroniser ensuite : Build > Nettoyage de Projet
J'espère que cela va vous aider à vous toutes, C'est un travail pour moi