サーバーから画像をビットマップとしてダウンロードし、それを描画可能に変換します。この描画可能を通知アイコンとして使用したいと思います。しかし、私はそれをすることができません。ここに私のコードがあります:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(bitmap)
.setWhen(when)
.build();
しかし、アイコンはResources int値なので、使用するとエラーが発生します。助けて
編集:
今、私は自分のコードを更新し、今私はそのようにしています:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(icon)
.setLargeIcon(bitmap)
.setWhen(when)
.build();
ただし、左側に大きなアイコンが、右側に小さなアイコンが表示されます。私はこれが必要ないので、このためにsetSmallIcon行を削除してコードを実行しますが、通知が表示されません
_Notification.Builder
_ に固有の開発者向けドキュメントを読むと、 setSmallIcon(int icon)
にはAリソースIDが必要であることがわかります。使用するドロウアブルのアプリケーションのパッケージ内。
画像をダウンロードしてビットマップに変換し、setSmallIcon()
に設定してもエラーが発生します。
たとえば、次のようにBitmap
をDrawable
に変換したとしても:
_Drawable d = new BitmapDrawable(getResources(), bmpFinal);
_
Drawable
はアプリケーションパッケージに存在しない存在しないため、引き続きエラーが発生します。
唯一の解決策は、Drawable
に存在するpackage
リソースを使用し、setSmallIcon()
メソッドに設定することです。典型的な使用法:
_builder.setSmallIcon(R.drawable.ic_launcher);
_
または、 setLargeIcon (Bitmap icon)
にはビットマップインスタンスが必要です。現在のコードに追加の変更を加える必要なく(既にBitmap
を持っているため)、要件に適合する場合は、それをそのまま使用できます。
そうでない場合は、Drawable
フォルダーのいずれかに既に存在するdrawable
リソースを使用する必要があります。
この方法を使用して試すことができます
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
http://javatechig.com/Android/android-notification-example-using-notificationcompat
主にAPI 23+に関連するこの質問にはいくつかのポイントがあります。setSmallIconのみに関心がある場合は、2番目と3番目のトピックに進んでください。
1日:
次のように、(リソースIDの代わりに)DrawableからLargeIconを設定できます。
_Drawable drawable= ContextCompat.getDrawable(this,R.drawable.your_drawable);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setLargeIcon(bitmap)
.setContentTitle("hahah")
.setContentText("Tap to stop")
.setOngoing(true);
_
2番目:
23未満のAPIで小さなアイコンを設定する必要がある場合は、_R.drawable.your_resource
_のようなリソースIDを設定する必要があります。 _NotificationCompat.Builder
_では、setSmallIcon()
でDrawablesまたはBitmapsを使用できません。
3番目:
幸いなことに、次のようにNotification.Builderを使用して、バージョン23以降のsetSmallIcon()
のIcon
型にサポートが拡張されました。
_ Drawable drawable = ContextCompat.getDrawable(this,R.drawable.your_drawable);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
Notification.Builder mBuilder =
new Notification.Builder(context)
.setSmallIcon(Icon.createWithBitmap(bitmap))
.setLargeIcon(bitmap)
.setContentTitle("hahah")
.setContentText("Tap to stop")
.setOngoing(true);
_
アプリケーションアイコンを取得するより良いオプション
Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)
画像を透明にすることが非常に重要です