20

ottengo la seguente eccezione quando uso un disegnabile vettore per impostare l'icona piccola per una notifica:notifica genera un errore quando si utilizza vettore drawable

android.app.RemoteServiceException: notifica Bad inviato dal com.qbes pacchetto .xxx: Impossibile creare l'icona: StatusBarIcon (pkg = com.qbes.xxxuser = 0 id = 0x7f020082 livello = 0 visibile = true num = 0)

Ecco il mio codice:

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); 

e le mie build.gradle (solo parti rilevanti):

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' 
} 

PS: Il codice funziona bene quando uso un disegnabile immagine png o jpg, ma si rompe quando si utilizza un disegnabile vettore.

Ho cercato un giorno intero ma non sono riuscito a trovare nulla che funzionasse per me. Qualche idea.

+0

Quale versione di Android stai testando? Si sta utilizzando il backport della libreria di supporto in generale, ma non penso che funzioni per una 'Notifica ', poiché la piattaforma è quella che sta cercando di utilizzare la risorsa. – CommonsWare

+0

Sto testando sull'API 19. Controllerò se il problema esiste in altre versioni. – ShahiM

+0

Ive ha inserito il controllo per la versione sdk ed evita di chiamare setSmallIcon per le versioni precedenti alla versione api 21 Kitkat – LPVOID

risposta

26

Si sta utilizzando il pacchetto di supporto vettoriale disegnabile. Va bene, ma funziona solo nella tua app. La piattaforma non sa come utilizzare i drawable vettoriali prima del livello 21 dell'API e, per uno Notification, la piattaforma è quella che esegue il rendering della risorsa.

È possibile eseguire il rendering del vettore su un valore Canvas supportato da un Bitmap, quindi utilizzare lo Bitmap nello Notification. In alternativa, è possibile utilizzare la libreria del backport vettoriale in generale, ma per la manciata di icone Notification, generare file PNG e utilizzarli sui dispositivi meno recenti. Put the corresponding vector drawables in res/drawable-anydpi-v21/ e i dispositivi più recenti utilizzeranno i drawable del vettore mentre i dispositivi più vecchi tornano ai PNG.

+0

ok. Ci proverò e riferirò. – ShahiM

+0

un'altra cosa. qual è la dimensione dp preferita per l'icona piccola? – ShahiM

+1

@ShahiM: '24dp', penso. – CommonsWare