Notificación lanza error al usar elementos de diseño vectoriales


Obtengo la siguiente excepción cuando uso un elemento de diseño vectorial para establecer el icono pequeño de una notificación :

Android.app.RemoteServiceException: Notificación incorrecta publicada desde el paquete com.qbes.xxx: No se pudo crear icono: StatusBarIcon(pkg = com.qbes.xxxuser=0 id=0x7f020082 level=0 visible=true num=0 )

Aquí está mi código :

mNotificationBuilder = new android.support.v4.app.NotificationCompat.Builder(this)
                .setDefaults(android.support.v4.app.NotificationCompat.DEFAULT_LIGHTS)
                .setSound(null)
                .setSmallIcon(R.drawable.logo_white)
                .setColor(getResources().getColor(R.color.colorPrimary))
                .setCategory(android.support.v4.app.NotificationCompat.CATEGORY_PROGRESS)
                .setContentTitle("Trip in Progress...")
                .setAutoCancel(false)
                .setProgress(0, 0, progress)
                .setOngoing(true)
                .setPriority(android.support.v4.app.NotificationCompat.PRIORITY_MAX)
                .setOnlyAlertOnce(true)
                .setContentIntent(pendingIntent);

mNotificationBuilder.setContentText(body);

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification note = mNotificationBuilder.build();

mNotificationManager.notify(Constants.NOTIFICATION_ID_Dash, note);

Y mi build.gradle (solo partes relevantes):

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.qbes.xxx"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 720
        versionName "0.7.20"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:design:23.2.1'
}

PD: El código funciona bien cuando uso un elemento de diseño de imagen png o jpg, pero se rompe cuando se utiliza un elemento de diseño vectorial.

He estado buscando durante todo un día, pero no pude encontrar nada que funcionara para mí. Cualquier Idea.

Author: ShahiM, 2016-05-20

1 answers

Está utilizando el paquete de soporte vector drawable. Eso está bien, pero eso solo funciona en tu aplicación. La plataforma no sabe cómo usar elementos de diseño vectoriales antes del nivel de API 21, y para un Notification, la plataforma es la que renderiza el recurso.

Puede renderizar el elemento de diseño vectorial usted mismo a un Canvas respaldado por un Bitmap, luego use ese Bitmap en el Notification. O bien, puede usar la biblioteca de backport vectorial en general, pero para sus pocos iconos Notification, genere archivos PNG para ellos y use ellos en los dispositivos más antiguos. Poner el vector correspondiente dibujables en res/drawable-anydpi-v21/, y los nuevos dispositivos de utilizar el vector dibujables, mientras que los dispositivos más antiguos caer de nuevo al Png.

 32
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-19 21:19:26