Saya memiliki pengaturan layanan latar depan di Android. Saya ingin memperbarui teks notifikasi. Saya membuat layanan seperti yang ditunjukkan di bawah ini.
Bagaimana saya bisa memperbarui teks pemberitahuan yang diatur dalam layanan latar depan ini? Apa praktik terbaik untuk memperbarui notifikasi? Kode sampel apa pun akan dihargai.
public class NotificationService extends Service {
private static final int ONGOING_NOTIFICATION = 1;
private Notification notification;
@Override
public void onCreate() {
super.onCreate();
this.notification = new Notification(R.drawable.statusbar, getText(R.string.app_name), System.currentTimeMillis());
Intent notificationIntent = new Intent(this, AbList.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
this.notification.setLatestEventInfo(this, getText(R.string.app_name), "Update This Text", pendingIntent);
startForeground(ONGOING_NOTIFICATION, this.notification);
}
Saya membuat layanan di aktivitas utama saya seperti yang ditunjukkan di bawah ini:
// Start Notification Service
Intent serviceIntent = new Intent(this, NotificationService.class);
startService(serviceIntent);
startService()
untuk menyampaikan perintah ke layanan, maka cukup panggilstartService()
lagi untuk memberitahu itu untuk memperbarui teksnya. Atau, jika Anda meneleponbindService()
, tambahkan metode ke API Anda agar layanan memperbarui teksnya. Atau, pertimbangkan apakah layanan itu sendiri yang harus memutuskan apakah akan memperbarui teks atau tidak. Atau, mungkin teksnya adalahSharedPeference
bahwa layanan tersebut memiliki pendengar. Tidak mungkin memberi Anda saran akurat dalam abstrak.cancel()
Pemberitahuan yang ditetapkan olehstartForeground()
. Anda harus menghapus status latar depan layanan itu sendiri (menggunakanstopForeground()
jika Anda ingin membuat teks ticker muncul lagi. Saya kehilangan jam karena jawaban ini membuat saya percaya itu sebenarnya mungkin.NotificationManager
bekerja seperti yang saya harapkan.Saat Anda ingin memperbarui Notifikasi yang diatur oleh startForeground (), cukup buat notifikasi baru dan kemudian gunakan NotificationManager untuk memberitahukannya.
Poin kuncinya adalah menggunakan id notifikasi yang sama.
Saya tidak menguji skenario berulang kali memanggil startForeground () untuk memperbarui Pemberitahuan, tapi saya pikir menggunakan NotificationManager.notify akan lebih baik.
Memperbarui Pemberitahuan TIDAK akan menghapus Layanan dari status latar depan (ini hanya dapat dilakukan dengan menelepon stopForground);
Contoh:
The dokumentasi negara
sumber
notify()
ataustartForeground()
keduanya mengarah ke panggilanonStartCommand()
.NotificationManager
untuk memperbarui pemberitahuan yang ditampilkanstartForeground
adalah bahwa panggilanstopForeground
tidak akan lagi menghapus pemberitahuan. Memperbaruinya dengan panggilan lain untukstartForeground
menyingkirkan masalah itu.Memperbaiki jawaban Luca Manzo di android 8.0+ saat memperbarui notifikasi itu akan membuat suara dan ditampilkan sebagai Heads-up.
untuk mencegah hal itu Anda perlu menambahkan
setOnlyAlertOnce(true)
jadi kodenya adalah:
sumber
new NotificationChannel
inilah kode untuk melakukannya di layanan Anda . Buat pemberitahuan baru, tetapi minta manajer pemberitahuan untuk memberi tahu id notifikasi yang sama dengan yang Anda gunakan di startForeground.
untuk kode sampel lengkap, Anda dapat memeriksa di sini:
https://github.com/plateaukao/AutoScreenOnOff/blob/master/src/com/danielkao/autoscreenonoff/SensorMonitorService.java
sumber
not foreground
untukforeground created
pesan.Tampaknya tidak ada jawaban yang ada yang menunjukkan cara menangani kasing lengkap - untuk memulai Foreground jika ini adalah panggilan pertama tetapi perbarui pemberitahuan untuk panggilan berikutnya.
Anda dapat menggunakan pola berikut untuk mendeteksi case yang tepat:
Selain itu, Anda perlu membuat pemberitahuan dan saluran seperti pada jawaban lain:
sumber