当应用程序转到后台时,Android会引发通知(不是单个活动)

时间:2013-03-08 20:39:06

标签: android android-activity background notifications

我有一个由3个活动A,B和C组成的Android应用程序:

  • A是应用程序本身(常规活动)
  • B是设置屏幕(使用PreferenceActivity制作)
  • C是关于屏幕(常规活动)

活动之间的关系如下:

  • A是主要活动
  • B的父母是A
  • C的父母是B

活动A在转到后台时会发出通知,这是通过在A的onStop()方法中调用NotificationManager的notify()来完成的。

当用户启动应用程序时,它从活动A开始,然后如果用户按下主页按钮,则会在显示主屏幕时立即引发通知。单击通知将使用户返回应用程序。

一切似乎都有效,但现在有一种我不喜欢的行为: 当用户启动应用程序然后进入设置(因此显示活动A然后显示B)时,也会引发通知(因为A已经转到后台以显示B)。

这不是必需的:只有当应用程序转到后台时才会引发通知,无论用户正在查看哪个活动。

如何实现这种正确的行为?

提前致谢, 马可

2 个答案:

答案 0 :(得分:1)

您可以设置一个布尔标志,在提升通知之前检查该标志,并在启动活动B之前将其设置为“false”。

当然,这样你就必须在活动B和C中做同样的事情,以便他们提出通知。

或者,正如之前暗示的那样,你可以实现一个自己的应用程序类并在那里获取回调。

答案 1 :(得分:1)

只需创建一个布尔标志shouldNotify,并在打开其他活动时将其设置为false。如果没有你的代码,我无法确切地告诉你如何实现它,但这里是一个让这个想法得以实现的例子:

private boolean shouldNotify = true;

@Override 
public void onStart(){
    super.onStart();
    shouldNotify = true;
}

@Override
public void onStop(){
    super.onStop();
    if(shouldNotify){
        sendNotification();
    }
}


// Where you need to put these next snippets depends on how you've made your Activity

/*
 * Launching settings activity
 */
shouldNotify = false;
Intent settingsIntent = new Intent(this, YourSettingsActivity.class);
startActivity(settingsIntent);