PendingIntent продолжает срабатывать при перезагрузке активности - PullRequest
1 голос
/ 11 июля 2011

У меня PendingIntent запускает при нажатии на уведомление, которое в основном отправляет намерение в мое главное меню (в котором установлен режим запуска singleTop).При этом запускается onNewIntent, который затем загружает нужные мне данные и переходит к другому действию с загруженными этими данными.К сожалению, onNewIntent не работает, если приложение в данный момент закрыто, поэтому мне пришлось вызвать onNewIntent из onCreate и включить проверку, затем onNewIntent.

Все работает великолепно, за исключением того, что теперь, когда вы запускаете свое уведомление, pendingIntent, похоже, радует срабатывание при каждом вызове onCreate, оно не исчезает.Я не уверен, как добавить чек или даже очистить ожидающее намерение после использования.Мой код выглядит следующим образом:

protected void onNewIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    if(extras != null && extras.containsKey("notification")) {
        if(extras.getBoolean("notification", false)) {
            loadData(extras.getString("data"));
            Intent myIntent = new Intent(this, OtherClass.class);
            startActivity(myIntent);
        }
    }
}

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    onNewIntent(getIntent());
}

//Code snippet of notification setup
notification = new Notification(R.drawable.icon, "Notification Reminder", System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL;
notificationIntent = new Intent(this, MainMenu.class);

Bundle bundle = new Bundle();
contentTitle = "Notification_Title";
bundle.putBoolean("notification", true);
bundle.putString("data", contentTitle.toString());
notificationIntent.putExtras(bundle);
                            notificationIntent.setData((Uri.parse("application://"+SystemClock.elapsedRealtime())));

contentTitle = contentTitle + " click me!";
contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 
                                PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(context, contentTitle, notificationText, contentIntent);

1 Ответ

2 голосов
/ 25 августа 2011

Просто используйте флаг PendingIntent.FLAG_ONE_SHOT, например:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
...