通知にコードmNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource( getResources(), R.drawable.ic_large_icon));
を追加すると、エラーや警告なしに機能しなくなります。これは、Lollipopより前、Lollipop、およびそれ以上でのみ有効です。そして、「動作する」とは、通知が表示されることを意味します。
私のサンプルコード:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.icon);
mBuilder.setContentTitle("Content Title");
mBuilder.setContentText("Content Text");
mBuilder.setLargeIcon(BitmapFactory.decodeResource( getResources(), R.drawable.ic_large_icon));
startForeground(1, mBuilder.build());
ビットマップをさまざまな方法でロードしようとしましたが、失敗し続けます...アイコンは128x128なので、サイズは問題になりませんか?
別のIDも試しましたが、問題を解決するものはありません。
私はどんなアドバイスもとてもうれしいです。正しい方向へのプッシュは私にとって世界を意味するでしょう。
EDIT 1#
この通知はサービスから発行されます。サービスは動作しており、ログ出力は「startForeground()」が実行された後のコードを教えてくれます。
最初に大きなアイコンを設定し、次に小さなアイコンを設定する必要があります。
私の場合、このコードは機能しています:
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_message));
mBuilder.setSmallIcon(R.mipmap.ic_message);
mBuilder.setContentTitle("Inbox");
mBuilder.setContentText("New message received");
Lolipop以前は、通知用の大きなアイコンはありませんでした。小さなアイコンは64x64である必要があり、作成中は白と透明の2色でレンダリングされることに注意してください。
NotificationCompat.Builder mBuilder;
if (SystemTools.isAndroidApiVersionBeforeLollipop()) {
mBuilder =
new NotificationCompat.Builder(context)
.setContentIntent(pendingIntent)
.setSmallIcon(iconRid)
.setColor(ContextCompat.getColor(context, R.color.transparent))
.setContentTitle(caption)
.setContentText(text)
.setOngoing(true)
.setWhen(0)
.setPriority(NotificationCompat.PRIORITY_LOW)
;
} else {
mBuilder =
new NotificationCompat.Builder(context)
.setContentIntent(pendingIntent)
.setSmallIcon(iconRid)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), bigIconRid))
.setColor(ContextCompat.getColor(context, R.color.transparent))
.setContentTitle(caption)
.setContentText(text)
.setOngoing(true)
.setWhen(0)
.setPriority(NotificationCompat.PRIORITY_LOW)
;
}