In Absturzprotokollen wird die folgende Ausnahme angezeigt:
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)
Ich poste meine Benachrichtigung von einem IntentService von einem PendingIntent-Satz über den AlarmManager mit der folgenden Methode. Alle hier übergebenen Werte stammen aus den Bundle-Extras im 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());
}
Nach dem, was ich von anderen Antworten gesehen habe - die Ausnahme, die ich sehe, tritt auf, wenn sie setSmallIcon()
nicht richtig aufgerufen wird.
Ich habe überprüft und doppelt überprüft, ob die übergebenen Ressourcen-IDs alle korrekt sind.
Antworten:
Was geschah, war, dass ich den Integer-Verweis auf das Symbol in das PendingIntent-Bundle aufgenommen habe und dieser Integer später beim Posten im NotificationManager referenziert wurde.
Zwischen dem Abrufen der Ganzzahlreferenz und dem Auslösen der ausstehenden Absicht wurde die App aktualisiert und alle zeichnbaren Referenzen geändert. Die Ganzzahl, die früher auf das richtige Zeichen verwies, bezog sich jetzt entweder auf das falsche Zeichen oder gar nicht (überhaupt keine - was zu diesem Absturz führte)
quelle
bundle.putString("img", "my_image")
und dann bei Bedarf wie folgt in die tatsächliche @ DrawableRes-Ganzzahl zu konvertieren:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
Es
VectorXml
ist bekannt, dass die Verwendung in Ihrer Benachrichtigung dieses Problem verursacht. Verwenden Sie PNGsquelle
drawable
Ordnern und PNGs indrawable-hdpi
,xhdpi
usw. Aber es gab keine png fürdrawable-mdpi
, und es stürzte auf MDPI Gerät eine Benachrichtigung über die Entsendung.Ich hatte jedes Mal das gleiche Problem, wenn ich eine Benachrichtigung über Kitkat anzeigen wollte. Was das Problem für mich verursacht hat, ist, dass ich jedes Symbol in XML (von svg), das kleine Symbol und das Aktionssymbol definiert habe. Nachdem ich sie durch png-s ersetzt habe, löste sich das Problem an meiner Seite.
quelle
android.app.RemoteServiceException: Ungültige Benachrichtigung veröffentlicht
Ich hatte das gleiche Problem, aber ich wurde gelöst. Mein Problem ist ".xml-Datei" der Remote-Ansicht.
In meiner XML-Datei wurde eine
View
zwischen demLinearLayout
for-Teiler hinzugefügt .Die obige
View
Komponente erstellt die Ausnahme für eine fehlerhafte Benachrichtigung. Dieser Ausnahmegrund ist nur eine XML-Datei von Remoteviews.Nach dem Entfernen dieser View-Komponente wurde Mein Code ausnahmslos ordnungsgemäß ausgeführt. Daher hatte ich das Gefühl, dass die Benachrichtigungsschublade keine benutzerdefinierten Ansichten akzeptiert.
Sie zeichnen also nichts wie die obige Ansicht in die XML-Datei des
RemoteView
Objekts.quelle
Mein Problem war, dass das Symbol, das ich verwendet habe
wurde nicht entsprechend generiert. Laut dem offiziellen Dokument :
Um dies zu erreichen , habe ich den von Roman Nurik unter https://romannurik.github.io/AndroidAssetStudio/index.html bereitgestellten Benachrichtigungsgenerator verwendet
Auf diese Weise können Sie ein Bild verwenden (unter Berücksichtigung dessen, dass dieses einen transparenten Hintergrund haben muss) und den Generator die Arbeit für Sie erledigen lassen, um die verschiedenen Größen für Benachrichtigungssymbole zu generieren.
Das Wichtigste ist, dass, wenn der Symbolgenerator nach dem Durchsuchen des zu verwendenden Bildes einen weiß gefüllten Kreis oder ein weißes Quadrat anzeigt, Probleme mit Ihrem Bild auftreten, möglicherweise weil es keine Transparentfolien aufweist. Stellen Sie daher sicher, dass du hast das ok
quelle
drawable
Ordnern und PNGs indrawable-hdpi
,xhdpi
usw. Aber es gab keine png fürdrawable-mdpi
, und es stürzte auf MDPI Gerät eine Benachrichtigung über die Entsendung.In meiner App tritt diese Art von Fehler nur während des Upgrades auf. Wenn sich die Ressourcen-ID in der neueren Version ändert,
RemoteView
kann Android die Ressource möglicherweise nicht finden und die nicht mehr verwendenRemoteServiceException
. Wenn Sie eine dritte Version veröffentlichen und die Ressourcen-ID nicht ändern, verschwinden die Fehler möglicherweise nur vorübergehend .Es ist möglich, diese Art von Fehlern durch Bearbeiten
res/values/public.xml
und zu reduzierenres/values/ids.xml
. Der Compiler generiert eine individuelle Ressourcen-ID, wenn sich die Ressourcen-ID nicht inpublic.xml
oder befindetids.xml
. Wenn Sie den Ressourcennamen ändern oder neue Ressourcen hinzufügen, ändert sich möglicherweise die ID, und einige Geräte finden sie möglicherweise nicht.Der Schritt ist also wie folgt:
res/values
finde daspublic.xml
undids.xml
public.xml
undids.xml
unterres/values
in Ihrem Quellcode und fügen Sie die Zeilen ein, die Sie gerade kopiert habenHinweis:
Gradle 1.3.0 und höher ignorieren die lokalen
public.xml
. Damit es funktioniert, müssen Sie ein Skript in Ihre hinzufügenbuild.gradle
Hinweis: Dieses Skript unterstützt kein Submodulprojekt. Ich versuche es zu beheben.
quelle
Sie haben das gleiche Symbol übergeben
und Sie Benachrichtigung
quelle
Nur für den Fall, dass das Symbol nicht wichtig ist, können Sie ersetzen,
Zu
Das funktioniert!
quelle
Ich hatte eine RemoteServiceException, wenn die Verwendung der Benachrichtigung in meiner Klasse von FirebaseMessagingService ausgeht. Ich habe den folgenden Code zu AndroidManifest.xml hinzugefügt:
Auch die Ressource ic_small wird in der Instanz einer Klasse Notification.Builder nach der Methode setSmallIcon (int icon) festgelegt.
quelle
Wenn Sie in Android Studio Version 3.0.0 und höher ein neues Bild im Ordner drawables hinzufügen, wählen Sie drawable anstelle von drawable-v24.
Wenn das von Ihnen verwendete Bild bereits a (v24) ist, kopieren Sie es einfach und fügen Sie es in dasselbe Verzeichnis ein (z. B. Drawables). Dieses Mal werden Sie gefragt, welches reguläre oder v24 - wählen Sie einfach, dass es nicht das v24 ist, und versuchen Sie es erneut. Dies sollte den Fehler beheben.
quelle
Das gleiche Problem ist auch bei mir aufgetreten und ich habe das gleiche gelöst
GRUND : Dies geschieht, weil wir Vector Drawable für RemoteViews verwenden und Vector Drawable Generate Drawable zur Kompilierungszeit generiert. Ich bin mir auch nicht sicher, warum einige Geräte die generierte ID für zeichnbare Ressourcen nicht erkennen können, während wir die App aktualisieren. Aber ja das war der Grund.
REPRODUZIEREN Schritte 1. Installieren Sie den vorherigen Build. 2. Senden Sie eine Benachrichtigung. 3. Aktualisieren Sie den Build mit dem nächsten Versionscode. 4. Öffnen Sie nach dem Aktualisieren der App die App nicht und senden Sie die Benachrichtigung erneut
LÖSUNG Ersetzen Sie den Vektor, der gezeichnet werden kann, durch eine normale Zeichnungsdatei (.png oder .jpg).
Ich hoffe das löst das Problem.
quelle
Wenn während der Aktualisierung Ihrer App eine Benachrichtigung angezeigt wird, wird diese möglicherweise ausgeführt. Möglicherweise müssen Sie einen BroadcastReceiver erstellen, der auf eine PACKAGE_CHANGED-Nachricht wartet. An diesem Punkt fahren Sie alle Ihre Dienste herunter, wodurch auch die zugehörigen Benachrichtigungen verworfen werden.
quelle
Ich hatte das gleiche Problem, als ich eine Benachrichtigung in einem Bundle festlegte. Ich habe es versucht und es hat mein Problem gelöst:
Stellen Sie sicher, dass setLargeIcon () vor setSmallIcon () aufgerufen wird.
quelle
Ich hatte auch das gleiche Problem. Das Problem ist mit dem Symbol, das Sie verwenden, ich habe android.R.drawable.stat_sys_download verwendet. Gehen Sie zu drawables.xml und fügen Sie diese ein.
und dann in Ihrem Code
Sie können anstelle dieses Bildes auch ein anderes Bild ausprobieren
quelle
Mein Weg, dies zu lösen: Ich hatte "schlechte" Ansichten in meinem Layout (z. B. ein Kontrollkästchen) - also habe ich sie entfernt.
RemoteViews scheinen nur Bilder und Texte zu unterstützen (dies wird durch Lesen des Dokuments bestätigt).
quelle
Ich hatte RemoteServiceException bei Verwendung von android.support.constraint.ConstraintLayout. Ändern Sie es in LinearLayout oder Relative und auch android: layout_height = "wrap_content" für Container
quelle
(Dies ist keine Lösung für die aktuelle Frage, hilft aber jemandem mit ähnlichen Kernproblemen.) Auch ich hatte das gleiche Problem. In meinem Fall habe ich jedoch eine beschädigte PNG-Datei verwendet, die das gleiche Problem verursacht. Also habe ich es gelöscht und die richtige PNG-Datei wieder aufgenommen.
quelle
Bitte ersetzen Sie
<android.support.v7.widget.AppCompatTextView
mit<TextView
aus der benutzerdefinierten Benachrichtigung Layout.Weil
android.support.v7.widget.AppCompatTextView
oderandroid.support.v7.widget.AppCompatImageView
nur zur Laufzeit funktioniert.Also benutze
TextView
oderImageView
quelle
Wenn noch jemand mit diesem Problem konfrontiert ist: Fügen Sie in Ihrem Zeichenordner eine PNG-Datei mit dem Namen ic_stat_ic_notification (oder einem beliebigen Namen, den Sie mögen) hinzu.
und fügen Sie in Ihrem Manifest unten einige Zeilen hinzu
und Sie können Ihre Symbole hier erstellen -> https://romannurik.github.io/AndroidAssetStudio/icon
quelle
Synchronisieren Sie das Projekt und dann Bereinigen Sie Datei> Synchronisieren und dann: Erstellen> Projekt bereinigen
Ich hoffe, das wird euch allen helfen. Es ist Arbeit für mich
quelle
Ich habe diesen Fehler aufgrund von Autolink- und LinksClickable-Optionen in der Textansicht in der Benachrichtigungsansicht erhalten:
Achtung!
quelle
Das hat bei mir funktioniert . Kommentieren Sie die Referenz des Symbols und können Sie den NotificationCompat.Builder problemlos verwenden.
quelle