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:
- Descompile el archivo apk y en
res/values
encuentrepublic.xml
eids.xml
- Encuentre todos los recursos relacionados con RemoteView en su aplicación y cópielos (cadenas, dimen, drawable, layout, id, color ...)
- Crea
public.xml
eids.xml
bajores/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
.