20

ich die folgende Ausnahme, wenn ich einen Vektor ziehbar verwenden das kleine Symbol für eine Meldung zu setzen:Mitteilung wirft Fehler beim Vektor mit Drawables

android.app.RemoteServiceException: Bad Mitteilung Paket com.qbes veröffentlicht .xxx: StatusBarIcon (PKG = com.qbes.xxxuser = 0 id = 0x7f020082 level = 0 sichtbar = true num = 0)

Hier ist mein Code:

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); 
konnte nicht Symbol erstellen 0

und meine build.gradle (nur relevante Teile):

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: Der Code funktioniert gut, wenn ich ein png oder jpg Bild ziehbar verwenden, aber bricht, wenn ein Vektor ziehbar verwenden.

Ich habe einen ganzen Tag gesucht, konnte aber nichts finden, was für mich funktionierte. Irgendwelche Ideen.

+0

In welcher Version von Android testen Sie? Sie verwenden den Support-Bibliothek-Backport im Allgemeinen, aber ich denke nicht, dass das für eine "Notification" funktioniert, da die Plattform diejenige ist, die versucht, die Ressource zu verwenden. – CommonsWare

+0

Ich teste auf API 19. Ich werde prüfen, ob das Problem in anderen Versionen existiert. – ShahiM

+0

Ive legte die Prüfung für SDK-Version, und vermeiden Sie den Aufruf von setSmallIcon für Versionen vor der Version 21 Kit Kit – LPVOID

Antwort

26

Sie verwenden das Vector-Zeichenunterstützungspaket. Das ist in Ordnung, aber das funktioniert nur in Ihrer App. Die Plattform weiß nicht, wie man Vektor-Drawables vor API Level 21 verwendet, und für eine Notification Plattform ist die Plattform diejenige, die die Ressource rendert.

Sie könnten den Vektor selbst zeichnend auf eine Canvas, die von einer Bitmap unterstützt wird, rendern, dann verwenden Sie diese Bitmap in der Notification. Oder Sie können die Vektor-Backport-Bibliothek im Allgemeinen verwenden, aber für Ihre Handvoll Notification Symbole, generieren Sie PNG-Dateien für sie und verwenden Sie sie auf älteren Geräten. Put the corresponding vector drawables in res/drawable-anydpi-v21/, und die neueren Geräte verwenden die Vektor-Drawables, während ältere Geräte auf die PNGs zurückgreifen.

+0

ok. Ich werde es versuchen und melden. – ShahiM

+0

noch eine Sache. Was ist die bevorzugte DP-Größe für das kleine Symbol? – ShahiM

+1

@ShahiM: '24dp', denke ich. – CommonsWare