Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android在应用程序进入后台时发出通知(不是单个活动)_Android_Android Activity_Background_Notifications - Fatal编程技术网

Android在应用程序进入后台时发出通知(不是单个活动)

Android在应用程序进入后台时发出通知(不是单个活动),android,android-activity,background,notifications,Android,Android Activity,Background,Notifications,我有一个Android应用程序,由3个活动A、B和C组成: A是应用程序本身(常规活动) B是设置屏幕(由PreferenceActivity创建) C是关于屏幕(常规活动) 这些活动之间的关系如下: A是主要活动 B的父母是A C的父母是B 活动A在进入后台时会引发通知,这是通过在A的onStop()方法中调用NotificationManager的notify()来实现的 当用户启动应用程序时,它从活动A开始,然后如果用户按下home按钮,则会在显示home屏幕时立即发出通知。单击通

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

  • A是应用程序本身(常规活动)
  • B是设置屏幕(由PreferenceActivity创建)
  • C是关于屏幕(常规活动)
这些活动之间的关系如下:

  • A是主要活动
  • B的父母是A
  • C的父母是B
活动A在进入后台时会引发通知,这是通过在A的onStop()方法中调用NotificationManager的notify()来实现的

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

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

这是不需要的:只有当应用程序转到后台时才应该发出通知,而不管用户正在查看的活动是什么

如何实施这种适当的行为

提前感谢,,
Marco

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

当然,通过这种方式,您必须在活动B和C中执行相同的操作,以便他们也发出通知


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

只需创建一个布尔标志
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);

你可以发布你尝试过的东西吗?让B和C发出通知也会导致活动之间的代码重复,如何避免?你可以发布一个链接到你提出的第二个备选方案吗?嗯,应用程序对象是(简化的)一个应用程序范围的单例对象,android系统实例化并保证它是一个单例。从您的活动中,您可以通过mActivity.getApplication()访问它。要实现您自己的代码,您必须实现您自己的应用程序子类,并在android清单中注册它。谢谢。然后我必须在每个活动的onStop()中发出通知,对吗?还是有更简洁的方法来避免重复代码?谢谢,我是按照你的建议以及@benjamin-k在他之前的回答(扩展应用程序类)中的建议来做的。有一点需要注意:我必须将sendNotification()调用放在onPause()中,而不是onStart()中,否则它将无法工作。