仅在未显示活动时显示通知

时间:2011-08-25 13:40:50

标签: java android android-intent android-service android-asynctask

我有一个我想要处理的后台任务。事情是,当任务完成时,我想调用一个新的Activity来向用户显示结果,只有当我的主Activity显示时,否则我只想发送一个通知,以便用户可以看到该动作完成了,并且能够随时打开它。

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

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

提前感谢您阅读我的案例,希望得到一些帮助!

4 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:4)

试试这样。

private static boolean isInForeground;

onResume(){
    isInForground = true;
}
onPause(){
   isInForground = false;
}

如果isInForground为true,则Activity为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
}

答案 2 :(得分:1)

听起来你想在服务的线程中实现任务。您可以在Activity中使用持久性静态布尔值来指示是否显示活动。用户可以在onResume()中看到活动,并且只要调用onPause(),该活动就不可见。在onResume()中将布尔值设置为true,在onPause()中将布尔值设置为false。

答案 3 :(得分:0)

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

希望我能提供帮助。