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

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

问题描述:

我有一个后台任务,我想处理。问题是,当任务完成时,我想调用一个新的Activity向用户显示结果,只有当我的主Activity显示时,否则我只想发送一个通知,以便用户可以看到该操作完成,并能够随时打开它,只要他喜欢。仅当活动未显示时才显示通知

我正在考虑使用服务来处理后台任务的开始和终止,并在完成时广播消息,但在这种情况下,我无法知道是显示活动还是未处理广播我应该发送通知。

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

在此先感谢您阅读我的案例,希望对您有所帮助!

下面是一篇很好的文章,介绍如何实现你想要的内容:Activity or Notification via Ordered Broadcast

主要想法是使用有序广播。你应该创建一个BroadcastReceiver这将生活没有任何活动。为了做到这一点,你应该在AndroidManifest.xml文件中声明它。该接收器将显示一个Notification。你也应该在你的主要活动中注册另一个BroadcastReceiver,它会在屏幕上显示一些东西。那么你只需要发送一个有序的广播。

+0

这是一个可能的答案,我发现问题后发现,似乎真的很好的做法。链接非常有用,非常感谢。我认为这是我将遵循的方式! – akalipetis

+3

超级优雅,效果不错! – Orr

+0

@Antonis:你能提供一个我们如何实现这个的代码吗? – Sam

试试这个。

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。

你可以使用SharedPreferences; 在onStart()或onStop()时更新活动的首选项,并在您的服务中对其进行验证。

希望我会帮助。