防止通知PendingIntent启动Activity已经启动了吗?

时间:2012-12-18 13:27:25

标签: android

该服务会创建一个持久性Notification,并通过PendingIntent点击启动主要活动。这是代码。

Intent notificationIntent = new Intent(getApplicationContext(), ViewPagerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(StreamingService.this, 0, notificationIntent, 0);

但是,如果主要活动已启动,当我按下通知时,它将再次启动 ,并再次启动...

最后,我有相同的活动,一个在另一个的顶部。我可以通过按下后退按钮来看到这一点,这将杀死主要活动一次,然后让我回到相同的活动,直到我关闭最后一个。

如何防止这种情况发生? PendingIntent可以检测到瞄准活动正在运行,因此它不会再次创建相同的活动,而是启动正在运行的活动吗?

PS。如果不能解释这个问题我会道歉。如果是这种情况,请告诉我,我会重新解释这个问题。

3 个答案:

答案 0 :(得分:7)

我也找到了这个解决方案。将此属性添加到Manifest

           <activity android:name=".MyActivity"
              android:label="@string/app_name"
              android:launchMode="singleTop"      // <-- THIS LINE
            >

每个Activity您需要此功能。到目前为止,它完全没有错误。

哪种解决方案更好?如果没有,我的更容易。

答案 1 :(得分:5)

根据您要实现的确切行为,您可以将其中一个标志作为getActivity()的最后一个参数传递:

答案 2 :(得分:1)

尝试在REQUEST_CODE中使用其他值。 在REQUEST_CODE中不使用默认值0

或您的pendingIntent将重新启动您的活动。

如果要使用正常活动周期,请在创建PendingIntent时输入请求值。

 gamesRef.on('value', function(snapshot){
  // find all empty games
  var gamesToRemove = [];
  snapshot.forEach(game => {

    if(game.val().player1 == ""
      && game.val().player2 == ""
      && game.val().player3 == ""
      && game.val().player4 == ""){
        gamesToRemove.push(game.key());
    }
  });
  return gamesToRemove;
})