Veo la siguiente excepción en los registros de bloqueo:
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)
Estoy publicando mi notificación desde un IntentService desde un conjunto PendingIntent a través del AlarmManager usando el siguiente método. Todos los valores pasados aquí son de los extras del paquete en el 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());
}
Por lo que he visto de otras respuestas, la excepción que veo ocurre cuando setSmallIcon()
no se llama correctamente.
Verifiqué y verifiqué dos veces que las ID de recursos que se pasan sean correctas.
Respuestas:
Lo que estaba sucediendo era que estaba incluyendo la referencia entera al ícono en el paquete PendingIntent, y luego se hizo referencia a ese entero mientras se publicaba en el NotificationManager.
Entre la obtención de la referencia entera y la intención pendiente de apagarse, la aplicación se actualizó y todas las referencias dibujables cambiaron. El entero que solía hacer referencia al dibujo correcto ahora hacía referencia al dibujo incorrecto o ninguno en absoluto (ninguno en absoluto, lo que provoca este bloqueo)
fuente
bundle.putString("img", "my_image")
y luego convertirlo cuando sea necesario al entero @DrawableRes real de la siguiente manera:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
VectorXml
Se sabe que el uso dentro de su notificación causa este problema. Use pngfuente
drawable
carpeta y png de endrawable-hdpi
,xhdpi
, etc, pero no había png paradrawable-mdpi
, y se estrelló en el dispositivo MDPI en la publicación de una notificación.Tuve el mismo problema cada vez que quería mostrar una notificación en Kitkat. Lo que me causó el problema es que he definido todos los íconos en xml (desde svg), el ícono pequeño y el ícono de acción también. Después de haberlos reemplazado con png-s, el problema se resolvió a mi lado.
fuente
android.app.RemoteServiceException: notificación incorrecta publicada
Tuve el mismo problema, pero estaba resuelto. Mi problema es el "archivo .xml" de la Vista remota.
En mi archivo xml me agregaron uno
View
entre elLinearLayout
divisor for.El
View
componente anterior que crea la excepción de notificación incorrecta. Este motivo de excepción es solo un archivo xml de Remoteviews.Después de eliminar ese componente Ver, Mi código se ejecutó correctamente, sin ninguna excepción. Entonces sentí que el cajón de notificaciones no aceptaba ninguna vista personalizada.
Por lo tanto, no dibuja nada como la vista anterior en el archivo de
RemoteView
objeto .xml .fuente
Mi problema fue que el ícono que estaba usando en
no se generó en consecuencia. Según el documento oficial :
Entonces, la mejor manera de completar lo anterior, utilicé el Generador de notificaciones proporcionado por Roman Nurik en https://romannurik.github.io/AndroidAssetStudio/index.html
De esa manera, puede usar una imagen (teniendo en cuenta que debe tener un fondo transparente) y dejar que el generador haga el trabajo por usted generando los diferentes tamaños para los iconos de notificación.
Lo más importante es que si el generador de iconos después de explorar la imagen que va a utilizar le muestra un círculo o cuadrado relleno de blanco, hay problemas con su imagen, tal vez porque no tiene transparencias, así que asegúrese de que tienes esto ok
fuente
drawable
carpeta y png de endrawable-hdpi
,xhdpi
, etc, pero no había png paradrawable-mdpi
, y se estrelló en el dispositivo MDPI en la publicación de una notificación.En mi aplicación, este tipo de error ocurre solo durante la actualización. Si la identificación del recurso cambia en la versión más reciente, Android
RemoteView
puede fallar al encontrar el recurso y descartar elRemoteServiceException
. Si publica una tercera versión y no cambia la identificación del recurso, los errores pueden desaparecer solo temporalmente .Es posible reducir este tipo de errores editando
res/values/public.xml
yres/values/ids.xml
. El compilador generará una identificación de recurso individual si la identificación del recurso no está enpublic.xml
oids.xml
. Cuando cambia el nombre del recurso o agrega algunos recursos nuevos, la identificación puede cambiar y algunos dispositivos pueden no encontrarlo.Entonces el paso es el siguiente:
res/values
encontrar elpublic.xml
yids.xml
public.xml
yids.xml
debajores/values
en su código fuente y pegue las líneas que acaba de copiarNota:
Gradle 1.3.0 y superior ignoran lo local
public.xml
. Para que funcione, debe agregar algún script en subuild.gradle
Nota: Este script no es compatible con el proyecto de submódulos. Estoy tratando de arreglarlo.
fuente
Has pasado el mismo ícono
y tu notificación
fuente
En caso de que el icono no sea importante, puede reemplazarlo,
A
¡Esto funciona!
fuente
Tuve RemoteServiceException cuando uso Notification en mi clase se extiende desde FirebaseMessagingService. Agregué el siguiente código a AndroidManifest.xml:
También recurso ic_small establecido en la instancia de una clase Notification.Builder por el método setSmallIcon (ícono int).
fuente
En Android Studio versión 3.0.0 y superior, al agregar una nueva imagen en la carpeta de dibujables, elija dibujable en lugar de dibujable-v24.
Si la imagen que está utilizando ya está en un (v24), simplemente cópiela y péguela en su mismo directorio (por ejemplo, drawables). Esta vez le preguntará qué regular o v24, solo asegúrese de que no sea el v24 y vuelva a intentarlo, esto debería solucionar el error.
fuente
El mismo problema ocurrió conmigo y resolví lo mismo
MOTIVO : Esto está sucediendo porque estamos usando vector drawable para RemoteViews y vector drawable genera dibujable en tiempo de compilación. Además, no estoy seguro de por qué algunos dispositivos no pueden detectar la identificación de recursos extraíbles generados mientras estamos subiendo la aplicación. Pero sí, esta fue la razón.
REPRODUCCIÓN Pasos 1. Instale la compilación anterior. 2. Enviar una notificación 3. Actualice la compilación con el siguiente código de versión 4. Después de actualizar la aplicación, no abra la aplicación y envíe la notificación nuevamente
SOLUCIÓN Reemplace el vector dibujable con un archivo dibujable normal (.png o .jpg).
Espero que esto resuelva el problema.
fuente
Si tiene una notificación visible mientras se actualiza su aplicación, puede encontrarse con esto. Lo que puede que tenga que hacer es crear un BroadcastReceiver que espere un mensaje PACKAGE_CHANGED, en el momento en que cierre todos sus servicios, lo que también descartará sus notificaciones asociadas.
fuente
Tuve el mismo problema cuando configuré una notificación en un paquete. Intenté esto y resolvió mi problema:
Asegúrese de que setLargeIcon () se invoque antes de setSmallIcon ().
fuente
Yo también tuve el mismo problema. El problema es con el icono que está utilizando, estaba usando android.R.drawable.stat_sys_download. Vaya a drawables.xml y pegue esto.
y luego en tu código
Puedes probar alguna otra imagen en lugar de esta imagen
fuente
Mi forma de resolver esto: tenía vistas "malas" en mi diseño (por ejemplo, una casilla de verificación), así que las eliminé.
RemoteViews parece admitir solo imágenes y textos (para confirmar al leer el documento).
fuente
Tuve RemoteServiceException cuando uso android.support.constraint.ConstraintLayout. Cámbielo a LinearLayout o Relative y también android: layout_height = "wrap_content" para el contenedor
fuente
(esta no es la solución para la pregunta actual, pero ayuda a alguien con un problema central similar) Yo también tuve el mismo problema, pero en mi caso he usado un archivo .png corrupto que está causando el mismo problema. Así que lo eliminé y volví a incluir el archivo .png correcto.
fuente
Reemplácelo
<android.support.v7.widget.AppCompatTextView
con<TextView
un diseño de notificación personalizado.Porque
android.support.v7.widget.AppCompatTextView
oandroid.support.v7.widget.AppCompatImageView
solo funciona en tiempo de ejecución.Entonces use
TextView
oImageView
fuente
Si alguien aún enfrenta este problema: agregue un archivo png en su carpeta dibujable con el nombre ic_stat_ic_notification (o cualquier nombre que desee)
y en su manifiesto agregue debajo un par de líneas
y puedes crear tus íconos aquí -> https://romannurik.github.io/AndroidAssetStudio/icon
fuente
Sincronice el proyecto y luego límpielo, Archivo> Sincronizar y luego: Compilar> Limpiar proyecto
Espero que eso los ayude a todos, es trabajo para mí
fuente
Recibí este error debido al enlace automático y a las opciones de enlaces en la vista de texto en la vista de notificaciones:
¡Ten cuidado!
fuente
Esto funcionó para mí. Comente la referencia del icono y así podrá usar NotificationCompat.Builder sin problemas.
fuente