Я перехватываю смс сообщения с некоторой информацией в них. Затем в моем SmsListener я создаю уведомление для отображения в строке состояния.
Затем, когда пользователь нажимает на уведомление, я хочу
- Вывести 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 обновляется данными из широковещательной передачи каждый раз, когда приложение выводит на передний план - последнее нежелательно, как я могу заставить свою деятельность забыть об этом намерении после первой обработки.
Вот пример приложения.