Уведомление выдает ошибку при использовании векторных чертежей
Я получаю следующее исключение, когда я использую вектор, который можно использовать для установки маленького значка для уведомления:
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);
и my 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-изображение, но ломается при использовании вектора, пригодного для рисования.
Я искал целый день, но не мог найти ничего, что сработало бы для меня. Любые идеи.
Ответы
Ответ 1
Вы используете векторный пакет поддержки. Это прекрасно, но это работает только в вашем приложении. Платформа не знает, как использовать векторные чертежи до уровня API 21, а для Notification
платформа является той, которая предоставляет ресурс.
Вы можете сделать вектор, пригодный для рисования, к Canvas
с поддержкой Bitmap
, а затем использовать Bitmap
в Notification
. Или, вы можете использовать векторную библиотеку backport в целом, но для ваших маленьких значков Notification
, сгенерировать PNG файлы для них и использовать их на старых устройствах. Поместите соответствующие векторные чертежи в res/drawable-anydpi-v21/
, а новые устройства будут использовать векторные чертежи, в то время как более старые устройства возвращаются к PNG.