仅当活动未显示时才显示通知
我有一个后台任务,我想处理。问题是,当任务完成时,我想调用一个新的Activity向用户显示结果,只有当我的主Activity显示时,否则我只想发送一个通知,以便用户可以看到该操作完成,并能够随时打开它,只要他喜欢。仅当活动未显示时才显示通知
我正在考虑使用服务来处理后台任务的开始和终止,并在完成时广播消息,但在这种情况下,我无法知道是显示活动还是未处理广播我应该发送通知。
所以这是我的问题,因为我在后台任务和服务方面的知识和经验有限,我决定寻求一些帮助。
在此先感谢您阅读我的案例,希望对您有所帮助!
下面是一篇很好的文章,介绍如何实现你想要的内容:Activity or Notification via Ordered Broadcast。
主要想法是使用有序广播。你应该创建一个BroadcastReceiver
这将生活没有任何活动。为了做到这一点,你应该在AndroidManifest.xml
文件中声明它。该接收器将显示一个Notification
。你也应该在你的主要活动中注册另一个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。
你可以使用SharedPreferences; 在onStart()或onStop()时更新活动的首选项,并在您的服务中对其进行验证。
希望我会帮助。
这是一个可能的答案,我发现问题后发现,似乎真的很好的做法。链接非常有用,非常感谢。我认为这是我将遵循的方式! – akalipetis
超级优雅,效果不错! – Orr
@Antonis:你能提供一个我们如何实现这个的代码吗? – Sam