Как обновить текст уведомления для службы переднего плана в Android?

У меня есть настройка переднего плана в Android. Я хотел бы обновить текст уведомления. Я создаю службу, как показано ниже.

Как обновить текст уведомления, который настроен в этой службе переднего плана? Какова наилучшая практика для обновления уведомления? Любой образец кода будет оценен.

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); } 

Я создаю службу в своей основной деятельности, как показано ниже:

  // Start Notification Service Intent serviceIntent = new Intent(this, NotificationService.class); startService(serviceIntent); 

Я бы подумал, что вызов startForeground() снова с тем же уникальным идентификатором и Notification с новой информацией будет работать, хотя я не пробовал этот сценарий.

Если вы хотите обновить набор уведомлений startForeground (), просто создайте новое уведомление, а затем используйте NotificationManager, чтобы уведомить об этом.

Ключевым моментом является использование одного и того же идентификатора уведомления.

Я не тестировал сценарий многократного вызова startForeground () для обновления Уведомления, но я думаю, что использование NotificationManager.notify было бы лучше.

Обновление уведомления НЕ удалит Службу из состояния переднего плана (это можно сделать только путем вызова stopForground);

Пример:

 private static final int NOTIF_ID=1; @Override public void onCreate (){ this.startForeground(); } private void startForeground() { startForeground(NOTIF_ID, getMyActivityNotification("")); } private Notification getMyActivityNotification(String text){ // The PendingIntent to launch our activity if the user selects // this notification CharSequence title = getText(R.string.title_activity); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MyActivity.class), 0); return new Notification.Builder(this) .setContentTitle(title) .setContentText(text) .setSmallIcon(R.drawable.ic_launcher_b3) .setContentIntent(contentIntent).getNotification(); } /** * This is the method that can be called to update the Notification */ private void updateNotification() { String text = "Some text that will update the notification"; Notification notification = getMyActivityNotification(text); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(NOTIF_ID, notification); } 

Вот код для этого в вашем сервисе . Создайте новое уведомление, но попросите диспетчер уведомлений уведомить тот же идентификатор уведомления, который вы использовали в startForeground.

 Notification notify = createNotification(); final NotificationManager notificationManager = (NotificationManager) getApplicationContext() .getSystemService(getApplicationContext().NOTIFICATION_SERVICE); notificationManager.notify(ONGOING_NOTIFICATION, notify); 

Для полных образцов кода вы можете проверить здесь:

https://github.com/plateaukao/AutoScreenOnOff/blob/master/src/com/danielkao/autoscreenonoff/SensorMonitorService.java