当我使用vector drawable设置通知的小图标时,出现以下异常:
android.app.RemoteServiceException:从包com.qbes.xxx发布的错误通知:无法创建图标:StatusBarIcon(pkg = com.qbes.xxxuser = 0 id = 0x7f020082 level = 0 visible = true num = 0)
这是我的代码:
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);
和我的build.gradle(仅相关部分):
build.gradle
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:当我使用png或jpg图像可绘制时,代码工作正常,但在使用矢量可绘制时会中断。
我一直在寻找一整天,但找不到对我有用的任何东西。有任何想法吗。
您正在使用矢量可绘制支持包。很好,但这仅适用于您的应用。该平台不知道如何在API级别21之前使用矢量可绘制对象,对于而言Notification,该平台就是渲染资源的平台。
Notification
你可以使自己绘制矢量到Canvas被支持的Bitmap,然后使用Bitmap中Notification。或者,您通常可以使用矢量反向端口库,但是对于少数几个Notification图标,请为它们生成PNG文件,并在较旧的设备上使用它们。将相应的矢量可绘制对象放入中res/drawable- anydpi-v21/,新的设备将使用矢量可绘制对象,而较旧的设备将退回到PNG。
Canvas
Bitmap
res/drawable- anydpi-v21/