studio priority overview notification icon developer anatomy android android-notifications android-resources android-drawable

priority - Cómo corregir: android.app.RemoteServiceException: notificación incorrecta publicada desde el paquete*: no se pudo crear el ícono: StatusBarIcon



notification overview android (14)

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 de un servicio de intención de un conjunto de PendingIntent a través del AlarmManager utilizando el siguiente método. Todos los valores pasados ​​aquí son de los paquetes adicionales en 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 estoy viendo sucede cuando setSmallIcon() no se llama correctamente.

Revisé y verifiqué dos veces que los ID de recursos que se pasaron son correctos.


(Esta no es la solución para la pregunta actual pero ayuda a alguien con problemas centrales similares) Yo también tuve el mismo problema, pero en mi caso he usado un archivo .png dañado que está causando el mismo problema. Así que lo he eliminado y vuelto a incluir el archivo .png correcto.


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 nueva, Android RemoteView puede no encontrar el recurso y descartar la RemoteServiceException . 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 y res/values/ids.xml . El compilador generará una identificación de recurso individual si la identificación del recurso no está en public.xml o ids.xml . Cuando cambia el nombre del recurso o agrega algunos recursos nuevos, la identificación puede cambiar y algunos dispositivos pueden no encontrarla.

Entonces el paso es el siguiente:

  1. Descompile el archivo apk y en res/values encuentre public.xml e ids.xml
  2. Encuentre todos los recursos relacionados con RemoteView en su aplicación y cópielos (cadenas, dimen, drawable, layout, id, color ...)
  3. Crea public.xml e ids.xml bajo res/values en tu código fuente y pega las líneas que acabas de copiar

Nota:

Gradle 1.3.0 y superior ignoran el public.xml local. Para que funcione, necesitas agregar algo de script en tu build.gradle

afterEvaluate { for (variant in android.applicationVariants) { def scope = variant.getVariantData().getScope() String mergeTaskName = scope.getMergeResourcesTask().name def mergeTask = tasks.getByName(mergeTaskName) mergeTask.doLast { copy { int i=0 from(android.sourceSets.main.res.srcDirs) { include ''values/public.xml'' rename ''public.xml'', (i == 0? "public.xml": "public_${i}.xml") i++ } into(mergeTask.outputDir) } } } }

Nota: Este script no es compatible con el proyecto de submódulos. Estoy tratando de arreglarlo.


Esto funcionó para mí. Comenta la referencia del ícono y así podrás usar el NotificationCompat.Builder sin problemas.

$msg_notificacion = [ ''title'' => "titulonotif", // "icon" : "myicon", ''body'' =>"cuerponotif" ];


Lo que sucedía era que estaba incluyendo la referencia entera al ícono en el paquete PendingIntent, y ese entero fue posteriormente referenciado mientras se publicaba en el NotificationManager.

Entre la obtención de la referencia de entero y la intención pendiente de apagarse, la aplicación se actualizó y todas las referencias dibujables cambiaron. El número entero que solía hacer referencia al dibujable correcto al que ahora se hace referencia, ya sea el dibujable incorrecto o ninguno en absoluto (ninguno en absoluto, lo que causa esta caída)


Mi manera de resolver esto: tenía vistas "malas" en mi diseño (por ejemplo, una casilla de verificación), así que las eliminé.

Las vistas remotas parecen admitir solo imágenes y textos (para confirmar al leer el documento).


Mi problema era que el ícono que estaba usando

.setSmallIcon(R.drawable.ic_stat_push_notif)

no fue generado en consecuencia. De acuerdo con el documento oficial :

Como se describe en Proporcionar conjuntos de iconos específicos de densidad y admitir pantallas múltiples, debe crear iconos separados para todas las densidades de pantalla generalizadas, incluidas pantallas de baja, media, alta y extra alta densidad. Esto garantiza que sus iconos se mostrarán correctamente en todo el rango de dispositivos en los que se puede instalar su aplicación.

Entonces, la mejor manera de cumplir 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 esto tiene que tener fondo transparente) y dejar que el generador haga el trabajo para 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 muestra un círculo o un cuadrado rellenos de blanco, hay problemas con la imagen, tal vez porque no tiene transparencias, por lo que debe asegurarse de que tienes esto bien


Se VectorXml uso de VectorXml dentro de su notificación puede causar este problema. Use png''s


Sincronice el proyecto y luego de Limpiarlo, Archivo> Sincronizar y luego: Buildt> Limpiar proyecto

Espero que eso los ayude a todos. Es trabajo para mí


Tenía RemoteServiceException cuando el uso de Notification en mi clase se extiende desde FirebaseMessagingService. Agregué el siguiente código a AndroidManifest.xml:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_small" />

También el recurso ic_small se establece en la instancia de una clase Notification.Builder por el método setSmallIcon (ícono int).


Tenía RemoteServiceException cuando uso android.support.constraint.ConstraintLayout. Cámbielo a LinearLayout o Relative y también a android: layout_height = "wrap_content" para contenedor


Tenía el mismo problema cada vez que quería mostrar una notificación sobre Kitkat. Lo que me causó el problema es que he definido todos los íconos en xml (de 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.


Tuve el mismo problema cuando configuré una notificación en un paquete. Intenté esto y resolvió mi problema:

builder.setLargeIcon(large_icon); builder.setSmallIcon(R.drawable.small_icon);

Asegúrese de que setLargeIcon () invocado antes de setSmallIcon ().


Yo también tuve el mismo problema. El problema es con el ícono que estás usando, yo estaba usando android.R.drawable.stat_sys_download. Ve a drawables.xml y pega esto.

<resources> <item name="ic_start_download" type="drawable">@android:drawable/stat_sys_download</item> </resource>

y luego en tu código

builder.setSmallIcon(R.drawable.ic_start_download);

Puedes probar alguna otra imagen en lugar de esta imagen


android.app.RemoteServiceException: se publicó una notificación incorrecta

Tuve el mismo problema, pero estaba resuelto. Mi problema es "archivo .xml" de vista remota.

En mi archivo xml, se agregó una View entre LinearLayout para el divisor.

<View android:layout_width="match_parent" android:layout_height="1dp" android:id="@+id/view" android:background="#000000" />

El componente View anterior crea la excepción de notificación incorrecta. Esta razón de Excepción es solo un archivo xml de Vistas Remotas.

Después de eliminar ese componente View, Mi código se ejecutó correctamente, sin excepción. Así que sentí que el cajón de notificaciones no aceptaba ninguna vista personalizada.

Por lo tanto, no dibujará nada como la vista anterior en el archivo .xml del objeto RemoteView .