Я перехватываю смс-сообщения с некоторой информацией в них. Затем в моем SmsListener я создаю уведомление для отображения в строке состояния. Затем, когда пользователь нажимает на уведомление, я хочу
- Выведите MainActivity на передний план (если такой активности еще нет, ее следует создать)
- Передать на него данные из смс
- Выполните некоторые изменения пользовательского интерфейса на основе этих данных в этом MainActivity.
Моя деятельность определяется как
<activity
android:name=".MainActivity"
android:screenOrientation="sensor"
android:label="@string/app_name"
android:launchMode="singleTask"/>
Активность запускается как
Intent i = new Intent();
i.setClass(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Также в моей деятельности я переопределил метод onNewActivity
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
// I have data from broadcast in intent variable passed to this activity
processDataFromBroadcast(intent);
}
Он отлично работает, если MainActivity уже существует, но если MainActivity не существует, он запускается, однако onNewIntent не вызывался
Затем я попытался вызвать processDataFromBroadcast из onCreate: processDataFromBroadcast(getIntent())
. Данные в первый раз правильно передаются из моей трансляции в активность. Однако, если MainActivity отправляется в фоновый режим, а затем снова выводится на передний план, вызывается onCreate или onNewIntent, а processDataFromBroadcast снова выполняется с намерением, отправленным широковещательной передачей, и, таким образом, моя MainActivity обновляется данными из широковещательной передачи каждый раз, когда приложение выводится на передний план - последнее нежелательно, как я могу заставить свою деятельность забыть об этом намерении после первой обработки. Вот пример приложения.