今日、通知アイコンに奇妙な問題があります。
私は何か悪いことをしましたか?
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.icon_notification)
.setContentTitle(this.getString(R.string.notification_title))
.setContentText(this.getString(R.string.notification_text))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
これが私のアイコン画像です(ここから新たにダウンロードしました https://material.io/icons/#ic_photo ): http://image.noelshack.com/fichiers/2016/44 /1478185219-icon-notification.png
私は何か見落としてますか ?
ちなみに、私はSDK 24を使用しており、現時点ではhdpi
リソースフォルダーのみを作成しました。
編集#1:ldpi
、mdpi
、xhdpi
アイコンを追加しましたが、何も変更されていません...
編集#2:より正確にするために、サービスからこの通知を作成しようとしています... FCMメッセージングサービス.。
コンパイル中のキャッシュの問題のようです...最初に使用した画像が悪かった(完全に色付けされていた)ので、コンパイラがファイル名に何らかのキャッシュを作成したと思います。
私はWindowsで作業しており、これを実行しました。携帯電話からアプリをアンインストールし、再コンパイル時にAndroid sudio =>からのすべてのキャッシュを無効にします。アイコンはOKでした。
CompileSDKversionが20を超える場合、通知アイコンは白地に透明な背景画像である必要があります。それ以外の場合、画像は白色の画像としてレンダリングされます。
アイコンを作成するためのガイドラインについては、以下のリンクもご覧ください
https://www.google.com/design/spec/patterns/notifications.html
また、通知アイコンジェネレーター。
ランチャーアイコンの白いバージョンになる別のアイコンを生成する必要があります。 Uは以下のリンクを使用してそのようなアイコンを生成できます。
注:背景が透明なランチャーアイコンのPNG画像をアップロードする必要があります。
アイコンを設定するために、uはこのような方法を持つことができます
private int getSmallIconForNotification(){
return (Build.VERSION.SDK_INT>Build.VERSION_CODES.Lollipop)? R.mipmap.ic_stat_launcher : R.mipmap.ic_launcher;
}
コードの使用法:
private NotificationCompat.Builder createNotificationBuilder(){
return new NotificationCompat.Builder(this)
.setSmallIcon(getSmallIconForNotification())
.setContentTitle("New Message")
.setContentText("Hi there.....")
.setAutoCancel(true);
}
注:-デバイスにAndroidバージョンが20を超える場合は、背景が透明なアイコンを生成する必要があり、通知の生成中にこのスニペットを使用します
int currentapiVersion = Android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= Android.os.Build.VERSION_CODES.Lollipop){
currentapiVersion=R.mipmap.ic_notification_lolipop;
} else{
currentapiVersion=R.mipmap.ic_launcher;
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(currentapiVersion)......