0

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

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

活动之间的关系如下:

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

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

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

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

这是不希望的:仅当应用程序进入后台时才应引发通知,而不管用户正在查看的活动如何。

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

在此先感谢,马可

4

2 回答 2

1

您可以设置一个布尔标志,在发出通知之前检查该标志,并在 startig Activity B 之前将其设置为“false”。

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

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

于 2013-03-08T20:56:44.440 回答
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);
于 2013-03-08T20:57:39.013 回答