web-dev-qa-db-ja.com

Androidのプッシュ通知のアイコンとしてVectorDrawableまたはVectorXMLを使用できますか?

私はPNG画像を使用していますが、サイズが大きくなりすぎて、品質に妥協する必要があります。だから私はベクトルが別の方法かもしれないと思っていましたか?例は大きな助けになります。

20
Rajan Kadeval

プッシュ通知のアイコンとしてVectorDrawableまたはVectorXMLを使用できますか?

はい、ベクタードローアブルを通知の標準的な方法で呼び出すだけです。

.setSmallIcon(R.drawable.my_vector)

透明度(通知アイコンは白または透明、あるいはその両方)を使用するには、ベクターXMLで色を設定するときにアルファチャネルを使用する必要があります。つまり、透明には#00000000、白には#FFFFFFFFを使用する必要があります。

10
Yoann Hercouet

VectorDrawablesは、Android Lollipop-API 21など)以降のバージョンの通知アイコンとしてのみ機能します。

ここで他の回答の1つに示されているように.setSmallIcon(R.drawable.my_vector)を使用しようとしたので、これを知っています。これはAPI 21以上では完全に正常に機能しますが、Lollipopより前のバージョンでは次のエラーが発生しました。

Android.app.RemoteServiceException:パッケージcom.example.appから投稿された不正な通知:アイコンを作成できませんでした:StatusBarIcon(pkg = com.example.appuser = 0 id = 0x7f02005a level = 0 visible = true num = 0)

この引数をサポートするスタックオーバーフローには他の回答もあります。

20

おそらく、ベクタードローアブルサポートパッケージを使用している場合は、通知にVectorDrawableアイコンを使用しないでください。Lollipop以前のデバイスでエラーが発生する可能性があります。

これをチェックしてください: ベクタードローアブルを使用すると通知がエラーをスローします

Wuthoutベクタードローアブルサポートパッケージではエラーは発生しませんでしたが、使用した後、Lollipop以前のデバイスは通知時にベクターアイコンにアクセスできず、次のエラーをスローしました。

Android.app.RemoteServiceException:パッケージcom.xxx.xxxから投稿された不正な通知:アイコンを作成できませんでした:StatusBarIcon(pkg = com.xxx.xxxuser = 0 id = 0x7f020082 level = 0 visible = true num = 0)

0
Mohit Singh

バージョン<21の場合、

ベクトルドローアブルリソースIDをsetSmallIcon()に直接渡す場合:できません。

setLargeIcon()の場合、間接的に、はい。使用する

VectorDrawableCompat drawable = VectorDrawableCompat.create(context.getResources(), resource id, theme);

次に、このドローアブルからビットマップを作成してsetLargeIcon()に渡します

0
Brian Chu

ベクタードローアブルを使用するように主張する場合は、それをbitmapに変換してみてください。

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.my_vector_drawable);
                    mBuilder = new NotificationCompat.Builder(context)
                            .setLargeIcon(bitmap)
                            .setOngoing(!cancelable);

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                        mBuilder.setSmallIcon(getNotificationIcon());
                    }
0
Siamak SiaSoft