Estoy viendo 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)

Voy a postear mi Notificación de un IntentService de un PendingIntent a través de la AlarmManager utilizando el siguiente método. Todos los valores pasados de la paquete de extras 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 estoy viendo que sucede cuando setSmallIcon() no se llama correctamente.

He comprobado y registrado el doble que la de los Identificadores de Recursos que se pasa todo está correcto.

  • Estoy experimentando el mismo error (informes de errores desde un live app). No puedo reproducir en mi dispositivo. Actualmente estoy pensando es porque la gente modificado el .apk
  • Chicos, ¿de qué manera puedo solucionar este problema. Yo uso png, pero muy rara vez la aplicación se bloquea
InformationsquelleAutor FishStix | 2014-08-14

9 Comentarios

  1. 94

    Lo que estaba sucediendo era, me estaba incluyendo el entero de referencia para el icono en el PendingIntent paquete, y se entero que fue más tarde que se hace referencia, mientras que ser enviado a la NotificationManager.

    Entre conseguir el entero de referencia y a la espera de que la intención de entrar, la aplicación se ha actualizado y todos los de la imagen referencias han cambiado. El entero que se utiliza para hacer referencia a la correcta dibujable ahora que se hace referencia, ya sea la incorrecta dibujable o ninguno (ninguno en todo el causante de este accidente)

    • Extraño. En otras palabras, esto no se puede arreglar es? Estoy viendo el mismo se bloquea en mi aplicación.
    • No parece reparables. Yo, en el futuro, tienen que idear una manera diferente de ir sobre la publicación de las notificaciones de las imágenes en el futuro….
    • Lo que si tratamos de establecer la textSize de la vista remota como ret.setInt(id, «setTextSize», 20); también se bloquea. Sé que también tienen que proporcionar a las unidades, pero ¿cómo puedo hacer que con tal firma del método. Cualquier puntero??
    • Tengo el mismo problema. Actualmente investiga la posibilidad de utilizar una vista personalizada de la utilización de la RemoteViews.ActionException con el fin de manejar la excepción planteada en este escenario. Voy a informar si puedo encontrar una manera de hacer que funcione. Otro enfoque es el de obtener la dibujables utilizado en la notificación para obtener el mismo ID en la R. dibujable al compilar para que el icono de obtener el mismo ID en compilaciones posteriores (pero todavía no he descubierto cómo hacerlo y, si es posible).
    • Podría ser posible para desactivar la notificación y todo lo relacionado con cuando la aplicación es asesinado a ser actualizado? (Suponiendo que podría hacer que la aplicación de evitar el tema)
    • En caso de que usted desea para referencia R. dibujable.my_image, es más seguro para guardarla en paquete como una cadena( bundle.putString("img", "my_image")y, a continuación, convertir cuando sea necesario para el real @DrawableRes entero de la siguiente manera: ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
    • Por favor, usted puede mostrar lo que estaban haciendo en el código? No estoy seguro de lo que quieres decir por «entero de referencia’ – ¿no son todos los enteros referencias?
    • Tengo el mismo problema pero su desconocido accidente no sé cómo resolver este problema alguno por favor me guía ….
    • Tengo este accidente y la explicación casi tiene sentido excepto para la Tela afirma que el mismo usuario ha estrellado 10 veces, no este tipo de bloqueo sólo pasan una vez y ser muy rara y probablemente nunca afectan al mismo usuario sólo porque una vez más de lo que todo tiene que alinear para que suceda?

  2. 46

    Utilizando VectorXml en el interior de su notificación ha sido conocido por causar este problema. Utilice png

    • Sólo Png estaban siendo utilizados.
    • En mi caso, tuve vector en drawable carpeta y png en drawable-hdpi, xhdpi, etc. Pero no había png para drawable-mdpi, y se estrelló en MDPI dispositivo en la publicación de una notificación.
    • Que acabamos de duplicar mi respuesta…
  3. 20

    No usar SVG en Kitkat!

    Tuve el mismo problema cada vez que yo quería mostrar una notificación en Kitkat. ¿Qué causó el problema para mí es que he definido cada icono en xml (de svg), el pequeño icono y el icono de acción también. Después de haber reemplazado con png-s el problema resuelto, a mi lado.

    • Puedo confirmar. Vector dibujables en las notificaciones causa RemoteServiceException en KitKat.
    • En el caso de KitKat, el problema se resolvió cuando he sustituido el XML y PNG en: nueva NotificationCompat.Generador(contexto, CHANNEL_ID).setSmallIcon(R. dibujable.my_icon)
    • Esto funcionó para mí. Yo estaba corriendo API 19 y se utiliza un archivo SVG para el icono de notificación y me estaba dando este error, hasta que me cambié a un pequeño icono png
  4. 9

    android.app.RemoteServiceException: Mala notificación publicado

    Tuve el mismo problema, pero yo estaba resuelto. Mi problema «.archivo xml» de la vista Remota.

    En mi archivo xml me fue añadido una View entre el LinearLayout para el divisor.

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

    La anterior View componente de la creación de la Mala notificación de excepción. Esta la razón de la Excepción es sólo archivo xml de Remoteviews.

    Después de eliminar el componente de Vista, Mi código se ejecuta correctamente, sin excepción alguna. Así que me sentí en ese cajón de Notificaciones de no aceptar las vistas personalizadas.

    Para no dibujar cualquier cosa, como la anteriormente vista en el .archivo xml de RemoteView objeto.

  5. 6

    En mi aplicación, este tipo de error ocurre sólo durante la actualización. Si el identificador de recurso de los cambios en la nueva versión, Android RemoteView puede fallar de encontrar los recursos y tirar las RemoteServiceException. Si publica una versión 3 y no cambiar el identificador de recursos, los errores pueden desaparecer sólo temporalmente.

    Es posible reducir este tipo de errores a través de la edición res/values/public.xml y res/values/ids.xml. Compilador generará un individuo id de recurso si el id de recurso no está en public.xml o ids.xml. Cuando u cambiar el nombre del recurso o añadir algunos nuevos recursos, la identificación puede cambiar y puede que algunos dispositivos no logran encontrarlo.

    Por lo que el paso es el siguiente:

    1. Descompilar el archivo apk y en res/values encontrar el public.xml y ids.xml
    2. Encontrar todos los recursos relacionados con la RemoteView en su aplicación y copiar ( cadenas, dimen, imagen, diseño, id, color… )
    3. Crear public.xml y ids.xml bajo res/values en su código fuente y pegar las líneas u acaba de copiar

    Nota:

    Gradle 1.3.0 y por encima de ignorar el local public.xml. Para que funcione, necesitas agregar algún script en su 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:
    Esta secuencia de comandos no apoyo submódulos proyecto. Estoy tratando de solucionarlo.

  6. 6

    Mi problema era que el icono que yo estaba usando en

    .setSmallIcon(R.drawable.ic_stat_push_notif)

    no fue generada en consecuencia. De acuerdo a la oficial doc:

    Como se describe en la Prestación de la Densidad Específica de los Conjuntos de iconos y de Apoyo
    Varias Pantallas, usted debe crear iconos independientes para todos generalizada
    pantalla de densidades, incluidos los de baja, media, alta, y
    extra-alta densidad de pantallas. Esto asegura que tus iconos
    correctamente en toda la gama de dispositivos en los que su aplicación puede ser
    instalado.

    Así que la mejor forma para cumplir la de arriba, yo Notificación Generador proporcionada por Roman Nurik en https://romannurik.github.io/AndroidAssetStudio/index.html

    De esa manera, usted puede utilizar una imagen (teniendo en cuenta que este tiene que tener fondo transparente) y dejar que el generador de hacer el trabajo para usted la generación de los diferentes tamaños de los iconos de notificación.

    La cosa más importante es que si el icono del generador después de examinar la imagen que se va a utilizar se muestra un blanco lleno de círculo o un cuadrado, hay problemas con su imagen, tal vez porque no tiene ningún tipo de transparencias, así que asegúrese de que usted tiene esta ok.

    • En mi caso, tuve vector en drawable carpeta y png en drawable-hdpi, xhdpi, etc. Pero no había png para drawable-mdpi, y se estrelló en MDPI dispositivo en la publicación de una notificación.
  7. 3

    Tiene pass el mismo icono

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

    y notificación

     NotificationCompat.Builder notificationBuilder =
                    new NotificationCompat.Builder(this, channelId)
                            .setSmallIcon(R.drawable.ic_stat_name)
                            .setContentTitle("Title")
                            .setContentText(messageBody)
                            .setAutoCancel(true)
                            .setSound(defaultSoundUri)
                            .setContentIntent(pendingIntent);
    • He pasado vector de la imagen como un recurso y creo que causaron los accidentes en oneplus/android 6 dispositivos. No estoy seguro 100%.
  8. 1

    Me había RemoteServiceException cuando el uso de la Notificación en mi clase se extiende desde FirebaseMessagingService. He añadido el siguiente código AndroidManifest.xml:

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

    También de recursos ic_small establecido en la instancia de una clase de Notificación.El generador por el método setSmallIcon(int icono).

    • estos metadatos se añade dentro de la <servicio </service> etiquetas?
  9. 1

    En Android Studio versión 3.0.0 y encima, cuando la adición de una nueva imagen en la dibujables carpeta elegir dibujable en lugar de dibujable-v24.Cómo solucionarlo: android.app.RemoteServiceException: Mala notificación publicada desde el paquete *: no se Pudo crear el icono: StatusBarIcon

    Si la imagen se está usando, es ya un (v24) acaba de copiar y pegar en su mismo directorio (por ejemplo. dibujables). Esta vez se le pedirá que regular o v24 – sólo asegúrese de que no es la v24 y tratar de nuevo este debe corregir el error.

Dejar respuesta

Please enter your comment!
Please enter your name here