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