Bagaimana tepatnya menggunakan Notification.Builder


100

Saya menemukan bahwa saya menggunakan metode yang tidak digunakan lagi untuk noficitations (notification.setLatestEventInfo ())

Ia mengatakan untuk menggunakan Notification.Builder.

  • Bagaimana cara saya menggunakannya?

Saat saya mencoba membuat instance baru, ini memberi tahu saya:

Notification.Builder cannot be resolved to a type

Saya perhatikan bahwa ini berfungsi dari API Level 11 (Android 3.0).
mobiledev Alex

Jawaban:


86

Ini ada di API 11, jadi jika Anda mengembangkan untuk sesuatu yang lebih awal dari 3.0 Anda harus terus menggunakan API lama.

Pembaruan : kelas NotificationCompat.Builder telah ditambahkan ke Paket Dukungan sehingga kita dapat menggunakan ini untuk mendukung API level v4 dan yang lebih baru:

http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html


Terima kasih. Saya bertanya-tanya mengapa tidak disebutkan di halaman fungsi itu sendiri
Saariko

15
Ya: peringatan deprecation agak terlalu dini menurut saya, tapi apa yang saya tahu.
Femi

152

Notification.Builder API 11 atau NotificationCompat.Builder API 1

Ini adalah contoh penggunaan.

Intent notificationIntent = new Intent(ctx, YourClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx,
        YOUR_PI_REQ_CODE, notificationIntent,
        PendingIntent.FLAG_CANCEL_CURRENT);

NotificationManager nm = (NotificationManager) ctx
        .getSystemService(Context.NOTIFICATION_SERVICE);

Resources res = ctx.getResources();
Notification.Builder builder = new Notification.Builder(ctx);

builder.setContentIntent(contentIntent)
            .setSmallIcon(R.drawable.some_img)
            .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.some_big_img))
            .setTicker(res.getString(R.string.your_ticker))
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setContentTitle(res.getString(R.string.your_notif_title))
            .setContentText(res.getString(R.string.your_notif_text));
Notification n = builder.build();

nm.notify(YOUR_NOTIF_ID, n);

13
Saya melihat ada teknik untuk melakukan ini dalam paket dukungan v4: NotificationCompat.Builder
stanlick

6
Saya rasa seseorang harus memberi tahu Google bahwa mereka memiliki kesalahan ketik yang serius di Notification.Builderhalaman dokumen. Saya melakukan apa yang mereka katakan tetapi itu tidak masuk akal. Saya datang ke sini dan melihat perbedaannya. Saya sangat menghargai jawaban Anda karena membuat saya menyadari kesalahan yang ada di dokumen.
Andy

5
Dokumentasi mengatakan builder.getNotification()sudah usang. Dikatakan Anda harus menggunakan builder.build().
mneri

26
NotificationBuilder.build () membutuhkan API Level 16 atau lebih tinggi. Apa pun antara API Level 11 & 15 Anda harus menggunakan NotificationBuilder.getNotification ().
Camille Sévigny

4
@MrTristan: Seperti yang tertulis dalam dokumentasi setSmallIcon(),, setContentTitle()dan setContentText()merupakan persyaratan minimum.
caw

70

Selain jawaban yang dipilih berikut adalah beberapa contoh kode untuk NotificationCompat.Builderkelas dari Trik Sumber :

// Add app running notification  

    private void addNotification() {



    NotificationCompat.Builder builder =  
            new NotificationCompat.Builder(this)  
            .setSmallIcon(R.drawable.ic_launcher)  
            .setContentTitle("Notifications Example")  
            .setContentText("This is a test notification");  

    Intent notificationIntent = new Intent(this, MainActivity.class);  
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,   
            PendingIntent.FLAG_UPDATE_CURRENT);  
    builder.setContentIntent(contentIntent);  

    // Add as notification  
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
    manager.notify(FM_NOTIFICATION_ID, builder.build());  
}  

// Remove notification  
private void removeNotification() {  
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
    manager.cancel(FM_NOTIFICATION_ID);  
}  

5
Kode pertama menggunakan pembuat Compat baru yang benar-benar berfungsi. Sudah selesai dilakukan dengan baik!
James MV

1
Bekerja dengan baik untuk saya juga. Dua catatan: 1) Anda harus membuat ikon 32x32 untuk "ic_launcher". Gambar putih pada latar belakang transparan 2) Anda perlu menentukan beberapa nomor acak untuk int FM_NOTIFICATION_ID = [yourFavoriteRandom];
Anders8

1
terima kasih banyak, Masalah saya adalah: ketika saya mengklik notifikasi untuk kedua kalinya, fragmen sebelumnya terbuka, dan baris "PendingIntent.FLAG_UPDATE_CURRENT" ini menyelesaikan masalah saya, dan membuat hari saya
Shruti

4

Notification Builder hanya untuk Android API Level 11 dan yang lebih baru (Android 3.0 dan lebih tinggi).

Karenanya, jika Anda tidak menargetkan tablet Honeycomb, Anda tidak boleh menggunakan Notification Builder melainkan mengikuti metode pembuatan notifikasi yang lebih lama seperti contoh berikut .


4
Anda bisa menggunakan Compatability Library, jadi Anda bisa menggunakannya di API 4 atau lebih tinggi.
Leandros

3

UPDATE android-N (maret-2016)

Silakan kunjungi tautan Pembaruan Pemberitahuan untuk lebih jelasnya.

  • Balasan Langsung
  • Pemberitahuan yang Dibundel
  • Tampilan Kustom

Android N juga memungkinkan Anda menggabungkan notifikasi serupa agar muncul sebagai notifikasi tunggal. Untuk memungkinkan hal ini, Android N menggunakan fileNotificationCompat.Builder.setGroup() metode yang . Pengguna dapat memperluas setiap notifikasi, dan melakukan tindakan seperti membalas dan menutup setiap notifikasi, satu per satu dari bayangan notifikasi.

Ini adalah contoh yang sudah ada sebelumnya yang menunjukkan layanan sederhana yang mengirimkan notifikasi menggunakan NotificationCompat. Setiap percakapan yang belum dibaca dari pengguna dikirim sebagai pemberitahuan yang berbeda.

Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru yang tersedia di Android N.

kode contoh .


hai, dapatkah Anda memberi tahu cara agar metode ini berfungsi Android 6.0 saat kami menggunakan downloader_library. Saya menggunakan Eclipse SDK - 25.1.7 || ADT 23.0.X sayangnya || Library Perluasan dan Library Lisensi Google APK keduanya 1.0
mfaisalhyder

2

Saya mengalami masalah saat membuat notifikasi (hanya mengembangkan untuk Android 4.0+). Tautan ini menunjukkan dengan tepat apa yang saya lakukan salah dan mengatakan yang berikut:

Required notification contents

A Notification object must contain the following:

A small icon, set by setSmallIcon()
A title, set by setContentTitle()
Detail text, set by setContentText()

Pada dasarnya saya melewatkan salah satu dari ini. Hanya sebagai dasar untuk memecahkan masalah ini, pastikan Anda memiliki semua ini paling tidak. Semoga ini akan menyelamatkan orang lain dari sakit kepala.


Jadi jika Anda berpikir: "Saya akan menemukan ikon nanti", Anda tidak akan mendapatkan pemberitahuan-cinta. Terima kasih untuk yang satu ini;)
Nanne

1

Seandainya itu membantu siapa pun ... Saya mengalami banyak masalah dengan menyiapkan pemberitahuan menggunakan paket dukungan saat menguji API yang lebih baru dan lebih lama. Saya bisa membuatnya berfungsi pada perangkat yang lebih baru tetapi akan mendapatkan pengujian kesalahan pada perangkat lama. Apa yang akhirnya membuatnya berfungsi untuk saya adalah menghapus semua impor yang terkait dengan fungsi notifikasi. Khususnya kelas NotificationCompat dan TaskStackBuilder. Tampaknya saat menyiapkan kode saya di awal impor di mana ditambahkan dari build yang lebih baru dan bukan dari paket dukungan. Kemudian ketika saya ingin mengimplementasikan item ini nanti di eclipse, saya tidak diminta untuk mengimpornya lagi. Harapan itu masuk akal, dan itu membantu orang lain :)


1

Ia bekerja bahkan di API 8 Anda dapat menggunakan kode ini:

 Notification n = 
   new Notification(R.drawable.yourownpicturehere, getString(R.string.noticeMe), 
System.currentTimeMillis());

PendingIntent i=PendingIntent.getActivity(this, 0,
             new Intent(this, NotifyActivity.class),
                               0);
n.setLatestEventInfo(getApplicationContext(), getString(R.string.title), getString(R.string.message), i);
n.number=++count;
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.flags |= Notification.DEFAULT_SOUND;
n.flags |= Notification.DEFAULT_VIBRATE;
n.ledARGB = 0xff0000ff;
n.flags |= Notification.FLAG_SHOW_LIGHTS;

// Now invoke the Notification Service
String notifService = Context.NOTIFICATION_SERVICE;
NotificationManager mgr = 
   (NotificationManager) getSystemService(notifService);
mgr.notify(NOTIFICATION_ID, n);

Atau saya sarankan untuk mengikuti tutorial yang bagus tentang ini


1

Saya telah menggunakan

Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Firebase Push Notification")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());

0
          // This is a working Notification
       private static final int NotificID=01;
   b= (Button) findViewById(R.id.btn);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Notification notification=new       Notification.Builder(MainActivity.this)
                    .setContentTitle("Notification Title")
                    .setContentText("Notification Description")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .build();
            NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            notification.flags |=Notification.FLAG_AUTO_CANCEL;
            notificationManager.notify(NotificID,notification);


        }
    });
}

0

Contoh mandiri

Teknik yang sama seperti dalam jawaban ini tetapi:

  • mandiri: salin tempel dan itu akan dikompilasi dan dijalankan
  • dengan tombol bagi Anda untuk membuat notifikasi sebanyak yang Anda suka dan bermain dengan maksud dan ID notifikasi

Sumber:

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main extends Activity {
    private int i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Button button = new Button(this);
        button.setText("click me");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Notification notification = new Notification.Builder(Main.this)
                        /* Make app open when you click on the notification. */
                        .setContentIntent(PendingIntent.getActivity(
                                Main.this,
                                Main.this.i,
                                new Intent(Main.this, Main.class),
                                PendingIntent.FLAG_CANCEL_CURRENT))
                        .setContentTitle("title")
                        .setAutoCancel(true)
                        .setContentText(String.format("id = %d", Main.this.i))
                        // Starting on Android 5, only the alpha channel of the image matters.
                        // https://stackoverflow.com/a/35278871/895245
                        // `android.R.drawable` resources all seem suitable.
                        .setSmallIcon(android.R.drawable.star_on)
                        // Color of the background on which the alpha image wil drawn white.
                        .setColor(Color.RED)
                        .build();
                final NotificationManager notificationManager =
                        (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(Main.this.i, notification);
                // If the same ID were used twice, the second notification would replace the first one. 
                //notificationManager.notify(0, notification);
                Main.this.i++;
            }
        });
        this.setContentView(button);
    }
}

Diuji di Android 22.

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.