Saya melihat pengecualian berikut di log kerusakan:
android.app.RemoteServiceException: Bad notification posted from package com.my.package: Couldn't create icon: StatusBarIcon(pkg=com.my.package user=0 id=0x7f02015d level=0 visible=true num=0 )
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1456)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5487)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Saya memposting Notifikasi dari IntentService dari pendingIntent yang diatur melalui AlarmManager menggunakan metode berikut. Semua nilai yang diteruskan di sini berasal dari paket bundel di PendingIntent / IntentService.
/**
* Notification
*
* @param c
* @param intent
* @param notificationId
* @param title
* @param message
* @param largeIcon
* @param smallIcon
*/
public static void showNotification(Context c, Intent intent,
int notificationId, String title, String message, int largeIcon,
int smallIcon) {
PendingIntent detailsIntent = PendingIntent.getActivity(c,
notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// BUILD
NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
c);
// TITLE
mNotifyBuilder.setContentTitle(title).setContentText(message);
// ICONS
mNotifyBuilder.setSmallIcon(smallIcon);
if (Util.isAndroidOSAtLeast(Build.VERSION_CODES.HONEYCOMB)) {
Bitmap large_icon_bmp = ((BitmapDrawable) c.getResources()
.getDrawable(largeIcon)).getBitmap();
mNotifyBuilder.setLargeIcon(large_icon_bmp);
}
mNotifyBuilder.setContentIntent(detailsIntent);
mNotifyBuilder.setVibrate(new long[] { 500, 1500 });
mNotifyBuilder.setTicker(message);
mNotifyBuilder.setContentText(message);
// NOTIFY
NotificationManager nm = (NotificationManager) c
.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(notificationId, mNotifyBuilder.build());
}
Dari apa yang saya lihat dari jawaban lain - pengecualian yang saya lihat terjadi ketika setSmallIcon()
tidak dipanggil dengan benar.
Saya telah memeriksa dan mengecek ulang bahwa ID Sumber Daya yang disahkan semuanya benar.
Jawaban:
Apa yang terjadi adalah, saya memasukkan referensi integer ke ikon dalam bundel PendingIntent, dan integer itu kemudian direferensikan saat diposting ke NotificationManager.
Di antara mendapatkan referensi bilangan bulat dan niat yang tertunda dimatikan, aplikasi diperbarui dan semua referensi yang dapat ditarik diubah. Integer yang digunakan untuk referensi drawable yang benar sekarang direferensikan drawable yang salah atau tidak sama sekali (tidak ada sama sekali - menyebabkan crash ini)
sumber
bundle.putString("img", "my_image")
dan kemudian mengonversi ketika diperlukan ke integer @DrawableRes aktual sebagai berikut:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
Penggunaan
VectorXml
di dalam pemberitahuan Anda telah diketahui menyebabkan masalah ini. Gunakan pngsumber
drawable
folder dan png didrawable-hdpi
,xhdpi
, dll Tapi tidak ada png untukdrawable-mdpi
, dan itu jatuh pada perangkat MDPI pada postingan pemberitahuan.Saya memiliki masalah yang sama setiap kali saya ingin menunjukkan pemberitahuan pada Kitkat. Apa yang menyebabkan masalah bagi saya adalah bahwa saya telah mendefinisikan setiap ikon di xml (dari svg), ikon kecil dan ikon tindakan juga. Setelah saya menggantinya dengan png-s masalah diselesaikan di sisi saya.
sumber
android.app.RemoteServiceException: Notifikasi buruk diposkan
Saya memiliki masalah yang sama, tetapi saya terselesaikan. Masalah saya adalah ".xml file" dari Remote view.
Dalam file xml saya, saya menambahkan satu
View
di antaraLinearLayout
pembagi untuk.View
Komponen di atas membuat pengecualian pemberitahuan Buruk. Alasan Pengecualian ini hanya file xml dari Remoteviews.Setelah menghapus komponen Lihat itu, Kode saya dijalankan dengan benar, tanpa kecuali. Jadi saya merasa bahwa laci Pemberitahuan tidak menerima tampilan khusus.
Jadi Anda tidak menggambar apa pun seperti tampilan di atas dalam file
RemoteView
objek .xml .sumber
Masalah saya adalah ikon yang saya gunakan
tidak dihasilkan sesuai. Menurut dokumen resmi :
Jadi cara terbaik untuk memenuhi hal di atas, saya menggunakan Notification Generator yang disediakan oleh Roman Nurik di https://romannurik.github.io/AndroidAssetStudio/index.html
Dengan cara itu, Anda dapat menggunakan gambar (dengan pertimbangan bahwa ini harus memiliki latar belakang transparan) dan biarkan generator melakukan pekerjaan untuk Anda menghasilkan ukuran yang berbeda untuk ikon pemberitahuan.
Yang paling penting adalah jika ikon generator setelah Anda menelusuri gambar yang akan Anda gunakan menunjukkan kepada Anda lingkaran atau kotak berwarna putih, ada masalah dengan gambar Anda, mungkin karena tidak memiliki transparansi, jadi pastikan bahwa kamu punya ini ok.
sumber
drawable
folder dan png didrawable-hdpi
,xhdpi
, dll Tapi tidak ada png untukdrawable-mdpi
, dan itu jatuh pada perangkat MDPI pada postingan pemberitahuan.Di aplikasi saya, bug semacam ini hanya terjadi selama peningkatan. Jika id sumber daya berubah dalam versi yang lebih baru, Android
RemoteView
mungkin gagal menemukan sumber daya dan membuangRemoteServiceException
. Jika Anda menerbitkan versi ke-3 dan tidak mengubah id sumber daya, bug hanya dapat hilang untuk sementara waktu .Dimungkinkan untuk mengurangi bug semacam ini dengan mengedit
res/values/public.xml
danres/values/ids.xml
. Compiler akan menghasilkan id sumber daya individual jika id sumber daya tidak dalampublic.xml
atauids.xml
. Ketika Anda mengubah nama sumber daya atau menambahkan beberapa sumber daya baru, id dapat berubah dan beberapa perangkat mungkin gagal menemukannya.Jadi langkahnya adalah sebagai berikut:
res/values
caripublic.xml
danids.xml
public.xml
dan diids.xml
bawahres/values
dalam kode sumber Anda dan tempelkan baris yang baru saja Anda salincatatan:
Gradle 1.3.0 dan di atas mengabaikan lokal
public.xml
. Untuk membuatnya berfungsi, Anda perlu menambahkan beberapa skrip dibuild.gradle
Catatan: Skrip ini tidak mendukung proyek submodul. Saya mencoba memperbaikinya.
sumber
Anda telah melewati ikon yang sama
dan Anda pemberitahuan
sumber
Kalau-kalau ikon tidak penting, Anda dapat mengganti,
Untuk
Ini bekerja!
sumber
Saya memiliki RemoteServiceException ketika menggunakan Notifikasi di kelas saya meluas dari FirebaseMessagingService. Saya menambahkan kode berikut ke AndroidManifest.xml:
Juga ic_small sumber diatur dalam contoh Notification.Builder kelas dengan metode setSmallIcon (ikon int).
sumber
Di Android Studio versi 3.0.0 dan di atasnya, saat menambahkan gambar baru di folder drawables pilih drawable bukan drawable-v24.
Jika gambar, yang Anda gunakan, adalah alread (v24) cukup salin dan tempel di direktori yang sama (mis. Drawables). Kali ini ia akan menanyakan Anda yang biasa atau v24 - pastikan saja bukan v24 dan coba lagi ini akan memperbaiki kesalahan.
sumber
Masalah yang sama terjadi dengan saya juga dan saya telah menyelesaikannya
ALASAN : Ini terjadi karena kami menggunakan drawable vektor untuk RemoteViews dan drawable vector menghasilkan drawable pada waktu kompilasi. Saya juga tidak yakin mengapa beberapa perangkat tidak dapat mendeteksi id sumber daya yang dapat dibuat yang dihasilkan saat kami meningkatkan aplikasi. Tapi ya inilah alasannya.
REPRODUSI Langkah 1. Instal bangunan sebelumnya. 2. Kirim pemberitahuan 3. Perbarui build dengan kode versi berikutnya 4. Setelah memperbarui aplikasi jangan membuka aplikasi dan mengirim pemberitahuan lagi
SOLUSI Ganti gambar yang dapat digambar dengan file drawable (.png or .jpg) yang normal.
Saya harap ini menyelesaikan masalah.
sumber
Jika Anda memiliki pemberitahuan yang terlihat saat aplikasi Anda diperbarui, Anda mungkin mengalami ini. Yang perlu Anda lakukan adalah membuat BroadcastReceiver yang menunggu pesan PACKAGE_CHANGED, di mana Anda mematikan semua layanan yang juga akan mengabaikan pemberitahuan terkait.
sumber
Saya memiliki masalah yang sama ketika saya mengatur notifikasi dalam satu bundel. Saya mencoba ini dan itu memecahkan masalah saya:
Pastikan setLargeIcon () dipanggil sebelum setSmallIcon ().
sumber
Saya juga punya masalah yang sama. Masalahnya adalah dengan ikon yang Anda gunakan, saya menggunakan android.R.drawable.stat_sys_download. Buka drawables.xml dan rekatkan ini.
dan kemudian dalam kode Anda
Anda dapat mencoba beberapa gambar lain sebagai ganti gambar ini
sumber
Cara saya mengatasi ini: Saya memiliki tampilan "buruk" dalam tata letak saya (mis: kotak centang) - jadi saya menghapusnya.
RemoteViews tampaknya hanya mendukung gambar dan teks (harus dikonfirmasi dengan membaca dokumen).
sumber
Saya memiliki RemoteServiceException ketika menggunakan android.support.constraint.ConstraintLayout. Ubah ke LinearLayout atau Relatif dan juga android: layout_height = "wrap_content" untuk wadah
sumber
(ini bukan solusi untuk pertanyaan saat ini tetapi membantu seseorang dengan masalah inti yang sama) Saya juga memiliki masalah yang sama, Tetapi dalam kasus saya saya telah menggunakan file .png rusak yang menyebabkan masalah yang sama. Jadi saya telah menghapusnya dan memasukkan kembali file .png yang benar.
sumber
Silakan ganti
<android.support.v7.widget.AppCompatTextView
dengan<TextView
dari tata letak pemberitahuan khusus.Karena
android.support.v7.widget.AppCompatTextView
atauandroid.support.v7.widget.AppCompatImageView
hanya berfungsi saat runtime.Jadi, Gunakan
TextView
atauImageView
sumber
Jika ada yang masih menghadapi masalah ini: Tambahkan file png di folder yang dapat digambar dengan nama ic_stat_ic_notification (atau nama apa pun yang Anda suka)
dan di manifes Anda tambahkan beberapa baris di bawah ini
dan Anda dapat membuat ikon Anda di sini -> https://romannurik.github.io/AndroidAssetStudio/icon
sumber
Sinkronisasi proyek dan daripada Bersihkan, File> Sinkronkan kemudian: Bangun> Bersihkan Proyek
Saya harap itu akan membantu Anda semua, Ini bekerja untuk saya
sumber
Saya mendapatkan kesalahan ini karena tautan otomatis dan opsi-opsi yang dapat diklik di tampilan teks dalam tampilan pemberitahuan:
Hati-hati!
sumber
Ini berhasil untuk saya. Komentari referensi ikon dan dengan demikian dapat menggunakan NotificationCompat.Builder tanpa masalah.
sumber