Aplikasi saya menghasilkan pemberitahuan, tetapi ikon yang saya tetapkan untuk pemberitahuan itu tidak ditampilkan. Sebaliknya saya mendapatkan kotak putih.
Saya telah mencoba mengubah ukuran png ikon (dimensi 720x720, 66x66, 44x44, 22x22). Anehnya, ketika menggunakan dimensi yang lebih kecil kotak putih lebih kecil.
Saya telah memeriksa masalah ini di Google, serta cara yang benar untuk menghasilkan notifikasi, dan dari apa yang saya baca, kode saya harus benar. Sayangnya hal-hal tidak seperti yang seharusnya.
Ponsel saya adalah Nexus 5 dengan Android 5.1.1. Masalah juga ada pada emulator, Samsung Galaxy s4 dengan Android 5.0.1 dan Motorola Moto G dengan Android 5.0.1 (keduanya saya pinjam, dan tidak punya sekarang)
Kode untuk notifikasi berikut, dan dua tangkapan layar. Jika Anda memerlukan informasi lebih lanjut, silakan bertanya.
Terima kasih semua.
@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
resultIntent.putExtras(bundle);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Notification notification;
Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
notification = new Notification.Builder(this)
.setSmallIcon(R.drawable.lg_logo)
.setContentTitle(title)
.setStyle(new Notification.BigTextStyle().bigText(msg))
.setAutoCancel(true)
.setContentText(msg)
.setContentIntent(contentIntent)
.setSound(sound)
.build();
notificationManager.notify(0, notification);
}
sumber
Jawaban:
Penyebab: Untuk 5.0 Lollipop "Ikon pemberitahuan harus seluruhnya putih".
Solusi untuk target Sdk 21
Jika Anda ingin mendukung Ikon Bahan Lollipop maka buatlah ikon transparan untuk Lollipop dan versi di atas. Silakan lihat berikut ini: https://design.google.com/icons/
Silakan lihat http://developer.android.com/design/style/iconography.html , dan kita akan melihat bahwa gaya putih adalah bagaimana notifikasi dimaksudkan untuk ditampilkan di Android Lollipop.
Di Lollipop, Google juga menyarankan agar kami menggunakan warna yang akan ditampilkan di belakang ikon pemberitahuan putih. Tautan Rujukan: https://developer.android.com/about/versions/android-5.0-changes.html
Di mana pun kami ingin menambahkan Warna https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)
Implementasi Notification Builder untuk versi OS Lollipop di bawah dan di atas adalah:
Catatan: setColor hanya tersedia di Lollipop dan hanya memengaruhi latar belakang ikon.
Ini akan menyelesaikan masalah Anda sepenuhnya !!
sumber
Jika Anda menggunakan Google Cloud Messaging, maka masalah ini tidak akan diselesaikan dengan hanya mengubah ikon Anda. Misalnya, ini tidak akan berfungsi:
Bahkan jika ic_notification transparan dan putih. Itu juga harus didefinisikan dalam meta data Manifest, seperti:
Meta-data berada di bawah
application
tag, untuk referensi.sumber
res/drawable/ic_notification.png
ukuran 196x196 di atas?Meta-data
saran tag.Saya sangat menyarankan mengikuti Panduan Desain Google :
yang mengatakan "Ikon pemberitahuan harus seluruhnya putih."
sumber
Nyatakan kode ini di Android Manifest:
Semoga bermanfaat bagi Anda.
sumber
ic_stat_name
? Apakah ini satu png? apakah ini banyak? tolong bantu!(Android Studio 3.5) Jika Anda adalah Android Studio versi terbaru, Anda dapat menghasilkan gambar notifikasi. Klik kanan pada folder res Anda > New> Image Asset . Anda kemudian akan melihat Mengkonfigurasi Aset Gambar seperti yang ditunjukkan pada gambar di bawah ini. Ubah Jenis Ikon menjadi Ikon Pemberitahuan . Gambar Anda harus putih dan transparan. Aset Gambar Konfigurasi ini akan menegakkan aturan itu. Penting: Jika Anda ingin ikon digunakan untuk pemberitahuan cloud / push, Anda harus menambahkan meta-data di bawah tag aplikasi Anda untuk menggunakan ikon pemberitahuan yang baru dibuat.
sumber
Kita bisa melakukan seperti di bawah ini:
Buat objek baru pembuat pemberitahuan dan panggilan
setSmallIcon()
menggunakan objek pembuat pemberitahuan seperti dalam kode di bawah ini.Buat metode di mana kami akan memeriksa versi OS yang kami instal aplikasi kami. Jika di bawah Lolipop yaitu API 21 maka akan mengambil ikon aplikasi normal dengan warna latar belakang yang lain itu akan mengambil ikon aplikasi transparan tanpa latar belakang apa pun. Jadi perangkat yang menggunakan versi os> = 21 akan mengatur warna latar belakang ikon menggunakan metode
setColor()
kelas pembangun Pemberitahuan.Kode sampel:
sumber
setColor
pada Kitkat (API 19) dan IceCreamSandwich (API 15), dalam kedua kasus itu mengabaikan warna tetapi tidak crash . Jadi bisakah saya dengan aman menghilangkan memeriksa versi OS?Coba ini
saya menghadapi masalah yang sama saya mencoba banyak jawaban tetapi tidak mendapatkan solusi, akhirnya saya menemukan cara untuk menyelesaikan masalah saya.
- Membuat ikon pemberitahuan dengan latar belakang transparan. Lebar dan tinggi aplikasi harus seperti ukuran di bawah ini dan tempel semua ini di proyek Anda-> aplikasi-> src-> main-> res
MDPI 24 * 24
HDPI 36 * 36
XHDPI 48 * 48
XXHDPI 72 * 72
setelah di atas tempelkan baris di bawah ini dalam metode onMessageReceived Anda
Jangan lupa untuk menambahkan kode ini dalam file manifes
sumber
tambahkan baris ini dalam file manifest.xml di blok aplikasi
sumber
Jika Anda ingin memberikan ikon pemberitahuan dukungan lollipop maka buat dua jenis ikon pemberitahuan:
Sekarang atur ikon yang sesuai untuk pembuat notifikasi pada run time base pada versi OS:
sumber
Akhirnya saya punya solusi untuk masalah ini.
Masalah ini terjadi hanya ketika aplikasi sama sekali tidak berjalan. (baik di latar belakang maupun di latar depan) . Saat aplikasi berjalan di latar depan atau di belakang, ikon pemberitahuan ditampilkan dengan benar . (Bukan kotak putih)
Jadi yang harus kita atur adalah konfigurasi yang sama untuk ikon notifikasi di Backend APIs seperti pada Frontend.
Di frontend kami telah menggunakan React Native dan untuk push notification kami telah menggunakan paket react-native-fcm npm .
Kami telah menggunakan paket fcm-push npm menggunakan Node.js sebagai backend untuk pemberitahuan push dan mengatur struktur payload sebagai berikut.
Apa yang pada dasarnya mencari gambar notification_icon disimpan secara lokal di sistem Android kami.
sumber
Notifikasi abu - abu seperti yang dijelaskan di bawah ini. Mereka tidak hitam-putih, terlepas dari apa yang ditulis orang lain. Anda mungkin telah melihat ikon dengan banyak corak, seperti bilah kekuatan jaringan.
Sebelum API 21 (Lollipop 5.0), ikon warna berfungsi. Anda dapat memaksa aplikasi Anda untuk menargetkan API 20, tetapi itu membatasi fitur yang tersedia untuk aplikasi Anda, jadi itu tidak dianjurkan. Anda dapat menguji level API yang sedang berjalan dan mengatur ikon warna atau ikon skala abu-abu dengan tepat, tetapi ini mungkin tidak bermanfaat. Dalam kebanyakan kasus, yang terbaik adalah menggunakan ikon skala abu-abu.
Gambar memiliki empat saluran, RGBA (merah / hijau / biru / alfa). Untuk ikon notifikasi, Android mengabaikan saluran R, G, dan B. Satu-satunya saluran yang diperhitungkan adalah Alpha, juga dikenal sebagai opacity. Desain ikon Anda dengan editor yang memberi Anda kendali atas nilai Alpha warna gambar Anda.
Bagaimana nilai-nilai Alpha menghasilkan gambar skala abu-abu:
Mengubahnya dengan
setColor
:Panggil
NotificationCompat.Builder.setColor(int argb)
. Dari dokumentasi untukNotification.color
:Pengujian saya dengan setColor menunjukkan bahwa komponen Alpha tidak diabaikan. Nilai Alpha yang lebih tinggi menjadikan piksel putih. Nilai Alpha yang lebih rendah mengubah piksel ke warna latar belakang (hitam di perangkat saya) di area notifikasi, atau ke warna yang ditentukan dalam notifikasi pull-down.
sumber
Saya telah menyelesaikan masalah dengan menambahkan kode di bawah ini ke manifes,
di mana
ic_stat_name
dibuat di Android Studio Klik kanan pada res >> Baru >> Aset Gambar >> IconType (Pemberitahuan)Dan satu langkah lagi yang harus saya lakukan di sisi server php dengan notifikasi payload
Perhatikan bagian ini
di mana nama ikon
"icon" => "ic_stat_name"
harus sama pada manifes.sumber
Persyaratan untuk memperbaiki masalah ini:
Format Gambar: PNG 32-bit (dengan alfa)
Gambar harus Transparan
Indeks Warna Transparansi: Putih (FFFFFF)
Sumber: http://gr1350.blogspot.com/2017/01/problem-with-setsmallicon.html
sumber
Saya menemukan tautan di mana kita dapat menghasilkan ikon putih kita sendiri,
Buka Tautan ini dan unggah ikon ic_launcher atau pemberitahuan Anda
sumber
Anda dapat menggunakan ikon berbeda untuk versi berbeda. Cukup setel logika pada ikon Anda seperti ini:
sumber
Untuk SDK> = 23, silakan tambahkan setLargeIcon
sumber
Untuk mengurangi versi spesifik SDK, Anda cukup melakukan ini: (ganti '#' ke '0x')
sumber
0xFF169AB9
, Anda kehilangan saluran alfa yang sepenuhnya buram.Saat Anda ingin menyimpan ikon berwarna-warni - Penanganan masalah
Tambahkan piksel dengan warna yang sedikit berbeda menjadi ikon.
Dalam kasus saya, ada ikon hitam dengan nuansa dan cahaya. Ketika ditambahkan piksel biru gelap itu berfungsi.
sumber
Saya memiliki masalah serupa di Android 8.0. Cobalah untuk menggunakan sumber daya ikon PUTIH. Saya memiliki kotak putih ketika saya mencoba menggunakan gambar berwarna untuk ikon, ketika saya menggantinya dengan ikon putih, itu mulai bekerja.
sumber