Восстановление уведомления после изменения ориентации экрана - PullRequest
0 голосов
/ 04 апреля 2020
Intent intent_1 = new Intent(this, MainActivity.class);
            taskStackBuilder = TaskStackBuilder.create(this);
            taskStackBuilder.addParentStack(MainActivity.class);
            taskStackBuilder.addNextIntent(intent_1);
            pendingIntent_1 = taskStackBuilder.getPendingIntent(EBC_ID,PendingIntent.FLAG_UPDATE_CURRENT);
notification = new Notification.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle(getString(R.string.Text))
                    .setContentText(time)
                    .setAutoCancel(false)
                    .setContentIntent(pendingIntent_1)
                    .build();
            notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(NOTIFICATION_ID, notification);

Я не нашел ничего подобного, поэтому я решил спросить.
После нажатия кнопки «Пуск» отображается уведомление, теперь, если я нажимаю кнопку «Стоп», чтобы отключить его, вызов: notificationManager.cancel(NOTIFICATION_ID);
это Хорошо. Но когда я меняю ориентацию экрана: Таким образом, кнопка остановки не работает, уведомление отображается постоянно.
Как мне сохранить ссылку на них?
Я пытался сохранить ее через объект Bundle, но для этого требовался простой объект (string, int), Я не могу поставить объект уведомления. Также пробовал sharedpreferences и parcelable метод, но он не работал, им тоже нужно (String, int).
Также пробовал что-то вроде этого:

String noti1 = String.valueOf(notification); 
String noti2 = String.valueOf(notificationManager);

Затем в методе onSaveInstanceState () я могу передать его:

savedInstanceState.putString("notification1", noti1);
savedInstanceState.putString("notification2", noti2); 

Но восстановить его как:
notification = savedInstanceState.getString("notification1");
Недопустимо. Объект уведомления отличается от объекта String.
Итак, как я могу получить ссылку на мой объект уведомления? (после того, как приложение уничтожено)
Должен ли я восстанавливать только объект уведомлений или messagesManager и TaskStackBuilder?

1 Ответ

1 голос
/ 04 апреля 2020

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

Вы всегда можете очистить / остановить уведомление, используя его уведомление. .

notificationManager.cancel(notificationId);

ОБНОВЛЕНИЕ

(Ответ на cra sh, NulltificationManager)

Объявить уведомлениеManager в ваша активность так.

public class MainActivity extends AppCompatActivity {

    NotificationManager notificationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}

Всегда инициализируйте NotificationManager в методе OnCreate.

Таким образом, ваш NotificationManager никогда не будет нулевым при повороте экрана.

...