Android: PendingIntent из уведомления не запускает onCreate() , если возвращает активность на экран

думаю, у меня возникли некоторые misunderstandigs с намерением флаги.. То, что я пытаюсь сделать, это то, что у меня есть приложения для потоковой передачи радио, которые имеют два действия (PlayerApplication и SettingsScreen). У меня есть служба.класс для потоковой передачи, который работает в фоновом режиме, который также содержит уведомление (Вы можете остановить/запустить воспроизведение в меню Уведомления-наложения и PlayerApplication). Если пользователь нажимает на уведомление, PlayerApplicationActivity должен вернуться к экран.

все работает нормально, ожидайте случая: пользователь открывает SettingsScreenActivity - > открывает NotificationOverlayMenu - > нажимает на уведомление - > PendingIntent возобновляет PlayerApplicationActivity

теперь, PlayerApplicationScreen есть,но я не могу ничего щелкнуть. Я вижу, что onCreate () моей PlayerApplication не запускается, если я возобновляю из уведомления. Но макет выглядит отлично (также завышен в onCreate ())

я использовал следующие PendingIntent в Службе.класс:

PendingIntent contentIntent = PendingIntent.getActivity(
      this.getApplicationContext(), //Service.class
      0, 
      new Intent(this,PlayerApplicationActivity.class)
             .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP),
      0);

поэтому на самом деле PendingIntent должен вернуть активность (если она уже запущена) наверх. Я использую неправильные намерения или я упускаю момент?

изменить: и я объявил launchMode в Манифесте.в XML

android:launchMode="singleTask"

2 ответов


согласно разработчику android сайт, в FLAG_ACTIVITY_CLEAR_TOP,FLAG_ACTIVITY_SINGLE_TOP и в режим запуска : SingleTask, Если экземпляр действия, который вы вызываете, уже запущен, то вместо создания нового экземпляра он вызывает onNewIntent() метод. Поэтому я думаю, что вы должны проверить это условие, что ваша активность выполняется, когда onCreate() не вызывает.


Я только что понял, что я делаю неправильно:

  1. для моей цели я использовал неправильный launchMode. Правый singleTop не singleTask

  2. я объявил launchMode в <application-node> вместо <activity-node>

    //Manifest.xml
    <activity
        android:name="..."
        android:launchMode="singleTop" >