web-dev-qa-db-ja.com

ベクトルドローアブルを使用すると、通知がエラーをスローします

ベクタードローアブルを使用して通知の小さなアイコンを設定すると、次の例外が発生します。

Android.app.RemoteServiceException:パッケージcom.qbes.xxxから投稿された不正な通知:アイコンを作成できませんでした:StatusBarIcon(pkg = com.qbes.xxxuser = 0 id = 0x7f020082 level = 0visible = 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画像ドローアブルを使用するとコードは正常に機能しますが、ベクトルドローアブルを使用するとコードが壊れます。

私は一日中探していましたが、私のために働くものを見つけることができませんでした。何か案は。

25
ShahiM

ベクタードローアブルサポートパッケージを使用しています。それは問題ありませんが、それはアプリでのみ機能します。プラットフォームは、APIレベル21より前のベクタードローアブルの使用方法を認識していません。Notificationの場合、プラットフォームはリソースをレンダリングするものです。

ベクトルを自分でCanvasに裏打ちされたBitmapにレンダリングしてから、そのBitmapNotificationで使用することができます。または、一般的にベクターバックポートライブラリを使用することもできますが、少数のNotificationアイコンについては、それらのPNGファイルを生成し、古いデバイスで使用します。 対応するベクトルドローアブルをres/drawable-anydpi-v21/ に配置すると、新しいデバイスはベクトルドローアブルを使用し、古いデバイスはPNGにフォールバックします。

39
CommonsWare