saya membuat pemberitahuan di dalam BroadcastReceiver melalui kode ini:
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
int icon = R.drawable.ic_stat_notification;
CharSequence tickerText = "New Notification";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,200,200,200};
notification.vibrate = vibrate;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
CharSequence contentTitle = "Title";
CharSequence contentText = "Text";
Intent notificationIntent = new Intent(context, NotificationActivity.class);
notificationIntent.putExtra(Global.INTENT_EXTRA_FOO_ID, foo_id);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
int mynotification_id = 1;
mNotificationManager.notify(mynotification_id, notification);
Ketika saya mengklik notifikasi, itu membuka NotificationActivity dan di dalam Activity saya dapat mengambil foo_id dari Intent-Bundle (misal 1)
Namun jika notifikasi lain dipicu dan saya mengkliknya lagi, aktivitas masih menerima nilai "lama" (1) dari Intent-Bundle. Saya sudah mencoba menghapus bundel dengan clear (), tetapi saya menerima efek yang sama. Saya pikir sth salah dengan kode saya ..
Jawaban:
Anda mengirim kode permintaan yang sama untuk intensitas Anda yang tertunda. Ubah ini:
Untuk:
Maksud tidak dibuat jika Anda mengirim params yang sama. Mereka digunakan kembali.
sumber
Intent
yang memiliki tambahan berbeda (viaputExtra
) dianggap sama dan digunakan kembali karena saya tidak memberikan id unik untuk beberapa panggilan niat tertunda - api mengerikanAtau, Anda dapat menggunakan kode berikut untuk menghasilkan PendingIntent Anda:
Dari dokumen untuk
PendingIntent.FLAG_UPDATE_CURRENT
:sumber
Anda melewati ID yang sama. Dalam situasi seperti ini, buat id unik dari waktu seperti ini:
Dan begini:
sumber
System.currentTimeMillis()
mengembalikan panjang, sedangkanrequestId
parameterPendingIntent.getActivity()
membutuhkan int.0xffffffff
adalah bitmask. Meskipun ada sedikit lebih banyak untuk itu, penjelasan sederhana adalah bahwa melakukan `long & 0xffffffff 'memberikan 32-bit terendah dari yang lama dan membuang 32-bit tertinggi, membuat Anda pada dasarnya int 32-bit. Ini lebih baik daripada hanya melemparkan ke int karena itu tidak akan membuang bit tanda (jika Anda membuang panjang yang lebih besar dari int ke sebuah bit tanda akan melimpah dan Anda akan berpotensi berakhir dengan nilai negatif )Bagi siapa pun yang mencari pendekatan terbaik setelah sekian lama, Anda harus melewati PendingIntent.FLAG_UPDATE_CURRENT sebagai argumen terakhir seperti yang ditunjukkan di bawah ini
Anda bahkan tidak perlu memberikan id unik baru.
Anda perlu melakukan ini untuk waktu berikutnya dan seterusnya bukan untuk pertama kalinya
sumber
Kode permintaan Anda adalah 0 untuk semua notifikasi. Ubah baris berikut:
Dengan:
sumber
Hanya ingin menambahkan opsi lain
sumber