У меня есть 3 занятия
A.MainActivity - просто действие с текстом и кнопкой на нем
B.SettingsActivity - это будет отображаться, если нажата кнопка на (A), это инициализирует таймер, который отправит уведомление при тревоге
C.DisplayNotification - действие по отображению уведомления в строке состояния, при щелчке на котором должно отображаться A
. Я хочу, чтобы это произошло:
- Запускаю приложение, отображается A
- Я нажимаю кнопку, будет отображаться B
- Я установил время для будильника
- Когда срабатывает будильник, в строке состояния отображается уведомление
- Если я нажму на уведомление, появится A
Вот что происходит (у меня 2 сценария с разными результатами):
Первый сценарий:
- После шага 3 я нажимаю кнопку «Назад», теперь будет отображаться «A»
- Затем я снова нажимаю кнопку «Назад», вызывается onDestroy of A и на экране отображается «домашняя страница».или «рабочий стол» телефона
- Я жду, пока сработает будильник
- Когда срабатывает будильник, в строке состояния отображается уведомление
- Я нажимаю на уведомление, оно запускаетсямое приложение отображает A
- Конец истории.Это то, что должно произойти
Второй сценарий: (ошибочный)
- После шага 3 я нажимаю кнопку HOME, onDestroy A еще не вызывается ипоследний экран был B
- На экране отображается «домашняя страница» или «рабочий стол» телефона
- Я жду, пока сработает будильник
- Когда срабатывает тревога, уведомлениеотображается в строке состояния, а B отображается автоматически, а я не щелкаю уведомление в строке состояния
- . Здесь я хочу, чтобы на экране не отображалась активность B.
Я пропускаю какие-либо флаги для уведомления или намерения?
Вот фрагмент кода для Действия B, который вызывает тревогу
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, DisplayNotification.class);
i.putExtra("NotifID", 1);
PendingIntent displayIntent = PendingIntent.getActivity(getBaseContext(), 0, i, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, displayIntent);
Вот код для Действия C
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int notifID = getIntent().getExtras().getInt("NotifID");
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("NotifID", notifID);
PendingIntent detailsIntent = PendingIntent.getActivity(this, 0, i, 0);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notif = new Notification(R.drawable.ic_launcher, "See activity!", System.currentTimeMillis());
notif.flags |= Notification.FLAG_AUTO_CANCEL;
notif.defaults |= Notification.DEFAULT_SOUND;
CharSequence from = "Notification from me";
CharSequence message = "See activity!";
notif.setLatestEventInfo(this, from, message, detailsIntent);
nm.notify(notifID, notif);
finish();
}
Надеюсь, кто-нибудь мне поможет:)
Спасибо!
Редактировать:
Спасибо Chirag_CID!Я должен был использовать Broadcast Receiver вместо другого занятия.Таким образом, вместо расширения Activity, DisplayNotification теперь расширяет приемник вещания.Это метод onReceive DisplayNotification:
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "DisplayNotification onReceive");
int notifID = intent.getExtras().getInt("NotifID");
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
i.putExtra("NotifID", notifID);
PendingIntent detailsIntent = PendingIntent.getActivity(context, 0, i, 0);
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = new Notification(R.drawable.ic_launcher, "See the quote of the day!", System.currentTimeMillis());
notif.flags |= Notification.FLAG_AUTO_CANCEL;
notif.defaults |= Notification.DEFAULT_SOUND;
CharSequence from = "Notification";
CharSequence message = "See the activity!";
notif.setLatestEventInfo(context, from, message, detailsIntent);
nm.notify(notifID, notif);
}