Java 仅当活动未显示时显示通知

Java 仅当活动未显示时显示通知,java,android,android-intent,android-service,android-asynctask,Java,Android,Android Intent,Android Service,Android Asynctask,我想处理一个背景任务。问题是,当任务完成时,我想调用一个新的活动来向用户显示结果,前提是我的主要活动正在显示,否则我只想发送一个通知,以便用户可以看到操作已完成,并且可以随时打开它 我曾考虑使用一个服务来处理后台任务的开始和结束,并在任务完成时广播一条消息,但在这种情况下,我无法选择是否显示活动或广播未被处理,我应该发送通知 这就是我的问题,因为我在后台任务和服务方面的知识和经验有限,我决定寻求一些帮助 提前感谢您阅读我的案例,希望能有所帮助 这里有一篇很好的文章,介绍了如何实现您想要的内容:

我想处理一个背景任务。问题是,当任务完成时,我想调用一个新的活动来向用户显示结果,前提是我的主要活动正在显示,否则我只想发送一个通知,以便用户可以看到操作已完成,并且可以随时打开它

我曾考虑使用一个服务来处理后台任务的开始和结束,并在任务完成时广播一条消息,但在这种情况下,我无法选择是否显示活动或广播未被处理,我应该发送通知

这就是我的问题,因为我在后台任务和服务方面的知识和经验有限,我决定寻求一些帮助


提前感谢您阅读我的案例,希望能有所帮助

这里有一篇很好的文章,介绍了如何实现您想要的内容:

主要思想是使用有序广播。您应该创建一个
BroadcastReceiver
,它将在没有任何活动的情况下运行。为此,您应该在
AndroidManifest.xml
文件中声明它。此接收器将显示
通知
。此外,您还应在您的主要活动中注册另一个优先级更高的
BroadcastReceiver
,它将在屏幕上显示一些内容。然后你只需要发送一个有序的广播。

像这样试试

private static boolean isInForeground;

onResume(){
    isInForground = true;
}
onPause(){
   isInForground = false;
}
如果isInForground为
true
,则活动处于Forground(显示)状态,否则不显示

如果您想从任何地方了解,请在MainActivity中添加以下内容

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

    onResume(){
         pref = PreferenceManager.getDefaultSharedPreferences(this);
         prefEditor = prefs.edit();
         prefEditor.putBoolean("isInForeground",true);
         prefEditor.commit();
    }

    onPause(){
             pref = PreferenceManager.getDefaultSharedPreferences(this);
             prefEditor = prefs.edit();
             prefEditor.putBoolean("isInForeground", false);
             prefEditor.commit();
    }
那就从你的服务中

pref = PreferenceManager.getDefaultSharedPreferences(this);
if(pref.getBoolean("isInForeground", false)){
       //MainActivity is in forground

}
else{
      //not in forground
}

听起来您希望在服务的线程中实现任务。活动中可以有一个表示是否显示活动的持久静态布尔值。用户在
onResume()
中可以看到一个活动,而在调用
onPause()
时该活动不可见。在
onResume()
中将布尔值设置为true,在
onPause()
中将布尔值设置为false。您可以使用SharedReferences; 在活动为onStart()或onStop()时更新其首选项,并在您的服务中进行验证


希望我能帮上忙。

这是我在发帖后发现的一个可能的答案,似乎是一个很好的做法。这个链接真的很有用,非常感谢。我想这就是我要走的路@安东尼斯:你能提供一个我们如何实现的代码吗?我还是不明白。除了广播接收器外,还涉及哪些API。什么参数去哪里?