Notifikasi Android tidak muncul


115

Saya membutuhkan program yang akan menambahkan notifikasi di Android. Dan ketika seseorang mengklik notifikasi, itu akan mengarahkan mereka ke aktivitas kedua saya.

Saya telah membuat kode. Notifikasi seharusnya berfungsi, tetapi karena alasan tertentu tidak berfungsi. Tidak Notificationmuncul sama sekali. Saya tidak tahu apa yang saya lewatkan.

Kode file-file itu:

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "test@gmail.com")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected

notificationManager.notify(0, n);

tolong coba lebih ringkas saat Anda mengajukan pertanyaan. Anda gagal menyebutkan apa yang tidak berhasil. Faktanya, Anda bahkan tidak menyebutkan ada sesuatu yang tidak berfungsi. Apakah Activitytidak diluncurkan? Apakah Notificationtidak ditayangkan?
slinden77

3
@dmmh saya berkata dalam pertanyaan saya apa masalah saya! Dan saya tidak menemukan sesuatu yang salah dengan pertanyaan itu. Pertanyaan saya khusus tentang masalah tersebut. Jika Anda bukan ahli tidak perlu menyodok! Dan jawaban tato469 baik-baik saja.
Choudhury AM

3
Saya menunjukkan bahwa tujuan dari situs ini bukan untuk Anda menyelesaikan masalah Anda, tetapi untuk orang lain agar dapat menemukan solusi untuk masalah juga. Saya tidak menyodok. Saya minta maaf saya menyakiti perasaan Anda, tetapi faktanya pertanyaan Anda salah, jawabannya salah, dan semua info menyesatkan ini akan mengarah ke programmer pemula lainnya, yang memiliki masalah yang sama seperti yang Anda gambarkan, menggunakan solusi yang tidak berfungsi berdasarkan kode yang ANDA berikan. Tidak ada relevansinya atau tidak apakah saya seorang ahli atau tidak. Terutama karena saya tidak benar, pertanyaan Anda tidak jelas, dan jawaban lainnya salah.
slinden77

Saya akan meminta untuk menghapus pertanyaan ini dan jawabannya karena menyesatkan. Semoga harimu menyenangkan.
slinden77

1
mengubah pertanyaannya, sehingga orang-orang bisa mengerti apa masalahnya.
Choudhury AM

Jawaban:


412

Kode tidak akan berfungsi tanpa ikon. Jadi, tambahkan setSmallIconpanggilan ke builder chain seperti ini agar berfungsi:

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) dan yang lebih baru

Android 8 memperkenalkan persyaratan baru untuk menyetel channelIdproperti dengan menggunakan file NotificationChannel.

private NotificationManager mNotificationManager;

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");

mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);

mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

// === Removed some obsoletes
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        NotificationManager.IMPORTANCE_HIGH);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());

Bagaimana cara mendapatkan CHANNEL_ID? tolong bantu
Ananta Prasad

@LAnantaPrasad CHANNEL_ID dimaksudkan sebagai pengenal untuk Anda. Itulah yang Anda gunakan untuk mengelompokkan pemberitahuan, seperti percakapan obrolan atau obrolan grup.
Casey Daniel

Terima kasih, setChannelIddiperlukan. Sebelum saya menambahkan itu, pemberitahuan muncul di perangkat SONY saya tetapi tidak di perangkat SAMSUNG.
Wesely


2
Juga sertakan pemeriksaan if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ mBuilder.setChannelId(channelId); }karena tanpa pemeriksaan ini, pemberitahuan tidak akan muncul, bahkan jika API perangkat Anda> = 26.
Koushik Shom Choudhury

58

Sebenarnya jawaban ƒernando Valle sepertinya tidak benar. Kemudian lagi, pertanyaan Anda terlalu kabur karena Anda gagal menyebutkan apa yang salah atau tidak berhasil.

Melihat kode Anda, saya berasumsi bahwa Notificationitu tidak ditampilkan.

Notifikasi Anda tidak muncul, karena Anda tidak memberikan ikon. Meskipun dokumentasi SDK tidak menyebutkan bahwa itu diperlukan, pada kenyataannya sangat banyak dan Anda Notificationtidak akan tampil tanpanya.

addActionhanya tersedia sejak 4.1. Sebelum itu, Anda akan menggunakan PendingIntentuntuk meluncurkan file Activity. Anda sepertinya menentukan a PendingIntent, jadi masalah Anda ada di tempat lain. Logikanya, seseorang harus menyimpulkan bahwa itu adalah ikon yang hilang.


saya menemukan masalah itu. Tapi terima kasih atas balasan yang tepat. Saya sangat menghargai bantuan Anda.
Choudhury AM

1
Anda mengatakan bahwa addAction hanya tersedia sejak 4.1 tetapi itu salah, saya menggunakannya di 2.3. Buku panduan referensi berbicara tentang tombol bukan tentang pemberitahuan: "Tombol tindakan tidak akan muncul pada platform sebelum Android 4.1." Anda dapat memeriksa di sini: AddAction disertakan dalam android.support.v4.app
ƒernando Valle

1
OP sedang menggunakan Notification.Builder, bukan NotificationCompat.Builder, seperti yang Anda sarankan. Hanya karena ada pustaka kompatibilitas dan dapat digunakan, tidak berarti fungsinya tersedia di API normal. Tautan yang Anda berikan sebenarnya menetapkan ini. Pertanyaan ini jelas terkait dengan Notification.Builder, seperti yang ditunjukkan dalam contoh. Dan pustaka kompatibilitas mungkin hanya menyertakan fungsi ini setelah 4.1 tersedia. Jawaban Anda menyesatkan, karena sekarang Anda menyarankan itu telah tersedia sejak 2.3.
slinden77

Maaf jika saya salah bicara, maksud saya itu mungkin di 2.3
ƒernando Valle

4
Argh ikonnya !! Bahkan tidak menyadari itu hilang tetapi menambahkannya memperbaiki masalah. Tidak melihat apa pun yang berguna di konsol tentang ikon yang hilang, tampaknya diam-diam gagal.
Pete

33

Anda kehilangan ikon kecil. Saya melakukan kesalahan yang sama dan langkah di atas menyelesaikannya.

Sesuai dokumentasi resmi: Objek Notification harus berisi yang berikut:

  1. Ikon kecil, ditetapkan oleh setSmallIcon ()

  2. Judul, ditetapkan oleh setContentTitle ()

  3. Teks detail, disetel oleh setContentText ()

  4. Pada Android 8.0 (API level 26) dan yang lebih tinggi , ID saluran notifikasi yang valid, ditetapkan oleh setChannelId () atau disediakan dalam konstruktor NotificationCompat.Builder saat membuat saluran.

Lihat http://developer.android.com/guide/topics/ui/notifiers/notifications.html


3
Ini tidak benar. Jika Anda menggunakan tata letak notifikasi khusus menggunakan setContent, tidak ada judul atau teks yang diperlukan.
Ray Li

11

Ini membuat saya tersandung hari ini, tetapi saya menyadari itu karena di Android 9.0 (Pie), Jangan Ganggu secara default juga menyembunyikan semua notifikasi, bukan hanya membungkamnya seperti di Android 8.1 (Oreo) dan sebelumnya. Ini tidak berlaku untuk notifikasi.

Saya suka mengaktifkan DND untuk perangkat pengembangan saya, jadi masuk ke pengaturan DND dan mengubah pengaturan untuk hanya membungkam pemberitahuan (tetapi tidak menyembunyikannya) memperbaikinya untuk saya.


9

Pembuatan saluran notifikasi adalah wajib untuk versi Android setelah Android 8.1 (Oreo) untuk membuat notifikasi terlihat. Jika notifikasi tidak terlihat di aplikasi Anda untuk Oreo + Android, Anda perlu memanggil fungsi berikut saat aplikasi Anda dimulai -

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

1

Saya pikir Anda melupakan

addAction(int icon, CharSequence title, PendingIntent intent)

Lihat di sini: Tambahkan Tindakan


1
metode addAction()ini tidak tersedia di Notification.Builder.
slinden77

1
Itu memang ada, tapi tidak digunakan lagi. Sebagai gantinya, Anda dapat meneruskan sebuah Actioninstance yang dapat Anda buat dengan Notification.Action.Builder. PS, Selalu gunakan alternatif Compat (yaitu, NotificationCompat), karena Google cenderung menambal bug dan memberikan kompatibilitas yang lebih baik dengannya
Gökhan Barış Aker

Jika Anda tidak ingin menentukan tindakan apa pun, cukup gunakan .setContentIntent(null)dengan pembuatnya.
Gökhan Barış Aker

1

Saya memiliki masalah yang sama dengan aplikasi Android saya. Saya mencoba notifikasi dan menemukan bahwa notifikasi muncul di emulator Android saya yang menjalankan sistem Android 7.0 (Nougat), sedangkan itu tidak berjalan di ponsel saya yang menjalankan Android 8.1 (Oreo).

Setelah membaca dokumentasi, saya menemukan bahwa Android memiliki fitur yang disebut saluran notifikasi, yang tanpanya notifikasi tidak akan muncul di perangkat Oreo. Di bawah ini adalah tautan ke dokumentasi Android resmi di saluran notifikasi.


1

Bagi saya itu adalah masalah dengan deviceToken. Harap periksa apakah token perangkat penerima dan pengirim diperbarui dengan benar dalam database Anda atau di mana pun Anda mengaksesnya untuk mengirim pemberitahuan.

Misalnya, gunakan yang berikut ini untuk memperbarui token perangkat pada peluncuran aplikasi. Oleh karena itu akan selalu terupdate dengan baik.

// Device token for push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
  new OnSuccessListener<InstanceIdResult>() {

    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {

        deviceToken = instanceIdResult.getToken();

        // Insert device token into Firebase database
        fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
                .addOnSuccessListener(
                  new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                });
    }
});

Dimana ini deviceTokendideklarasikan?
Peter Mortensen

Mengapa onSuccesskosong?
Peter Mortensen

@PeterMortensen .. pada kesuksesan Anda dapat melakukan apa pun yang diizinkan logika Anda seperti memulai niat baru, atau bersulang, atau tetap pada halaman yang sama. Sedangkan untuk deklarasi deviceToken Anda dapat mendeklarasikannya sebagai Private String deviceToken sebelum onCreate di halaman Anda
DragonFire

(Untuk membuat komentar saya lebih jelas: Ada dua onSuccesss - saya mengacu pada bagian dalam (yang kosong))
Peter Mortensen

1

Anda juga perlu mengubah file build.gradle, dan menambahkan versi Android SDK yang digunakan ke dalamnya:

implementation 'com.android.support:appcompat-v7:28.0.0'

Ini bekerja seperti pesona dalam kasus saya.


0

Notifikasi mungkin tidak ditampilkan jika Anda menampilkan notifikasi dengan cepat satu demi satu atau membatalkan yang sudah ada, lalu langsung menampilkannya lagi (misalnya untuk memicu notifikasi pendahuluan untuk memberi tahu pengguna tentang perubahan dalam notifikasi yang sedang berlangsung). Dalam kasus ini, sistem dapat memutuskan untuk memblokir notifikasi jika dirasa terlalu berlebihan / berisi spam bagi pengguna.

Harap dicatat, bahwa setidaknya pada stok Android (diuji dengan 10) dari luar perilaku ini terlihat agak acak: terkadang terjadi dan terkadang tidak. Dugaan saya, ada ambang waktu yang sangat singkat di mana Anda tidak boleh mengirim terlalu banyak notifikasi. Menelepon NotificationManager.cancel()dan kemudian NotificationManager.notify()terkadang menyebabkan perilaku ini.

Jika Anda memiliki opsi, saat memperbarui pemberitahuan jangan membatalkannya sebelumnya, tetapi panggil saja NotificationManager.notify()dengan pemberitahuan yang diperbarui. Ini sepertinya tidak memicu pemblokiran yang disebutkan di atas oleh sistem.


-1

Jika Anda menggunakan versi> = Android 8.1 (Oreo) saat menggunakan saluran Pemberitahuan, atur kepentingannya ke tinggi:

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

1
Apa yang Anda maksud dengan "satu versi> =" ? Apakah yang Anda maksud "di versi 8.1 (atau lebih tinggi)" ? Harap balas dengan mengedit jawaban Anda , bukan di sini di komentar (jika perlu).
Peter Mortensen

@PeterMortensen maafkan saya karena itu hanya jenis terima kasih telah mengoreksi saya
Faisal Naseer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.