Подтвердить что ты не робот

Уведомление выдает ошибку при использовании векторных чертежей

Я получаю следующее исключение, когда я использую вектор, который можно использовать для установки маленького значка для уведомления:

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-изображение, но ломается при использовании вектора, пригодного для рисования.

Я искал целый день, но не мог найти ничего, что сработало бы для меня. Любые идеи.

4b9b3361

Ответ 1

Вы используете векторный пакет поддержки. Это прекрасно, но это работает только в вашем приложении. Платформа не знает, как использовать векторные чертежи до уровня API 21, а для Notification платформа является той, которая предоставляет ресурс.

Вы можете сделать вектор, пригодный для рисования, к Canvas с поддержкой Bitmap, а затем использовать Bitmap в Notification. Или, вы можете использовать векторную библиотеку backport в целом, но для ваших маленьких значков Notification, сгенерировать PNG файлы для них и использовать их на старых устройствах. Поместите соответствующие векторные чертежи в res/drawable-anydpi-v21/, а новые устройства будут использовать векторные чертежи, в то время как более старые устройства возвращаются к PNG.