服务,活动和通知

时间:2011-04-04 12:11:57

标签: android

我有启动服务的程序。

服务定期检查服务器是否有更新。如果服务器服务创建通知有新的更新。即使我的应用程序是前台,它也会创建notificatins。但我希望它只在我的应用程序是后台或停止时创建通知。

你能告诉我实施它的最佳方法吗?

3 个答案:

答案 0 :(得分:2)

看看sendOrderedBroadcast()。您的服务可以发送该服务,然后让处理程序等待响应。如果活动处于打开状态并处理请求,您的活动可以设置真实响应。然后,当服务中的处理程序获得响应时,如果没有处理广播,它可以创建通知,否则它可以忽略它。

在您的UI活动中设置如下的BroadcastReceiver:

//register BroadcastReceiver.  This will probably go in onCreate()
registerReceiver(messageBroadcastListener,
            new IntentFilter("my.intent.INTENT_NAME"));

//Defined elsewhere in your code, I always do these outside of onCreate()
//to keep it clean
BroadcastReceiver messageBroadcastListener = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        Bundle data = intent.getExtras();
        if(data != null) {
            //display info or whatever and then:
            setResultCode(Activity.RESULT_OK);
        }
    }

};

在您的服务中使用sendOrderedBroadcast()并为结果设置接收器,如下所示:

BroadcastReceiver sendMessageResultReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        if(getResultCode() != Activity.RESULT_OK) {
            //display notification here
          }
     }
}

在AndroidManifest.xml中为您的活动设置意图过滤器。

<activity android:name=".MyActivity">
        <intent-filter>
            <action android:name="my.intent.INTENT_NAME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</activity>

答案 1 :(得分:0)

我认为标志变量可以完成这项工作。 有一个变量并且只更改它们在单击通知时执行的pendingintent。 在值未更改时禁用通知。

答案 2 :(得分:0)

你是应用程序'onPause()和onResume()当活动被另一个应用程序覆盖或者可靠地回到前面时被调用。然后,您可以在服务上设置公共变量或调用函数。