我有启动服务的程序。
服务定期检查服务器是否有更新。如果服务器服务创建通知有新的更新。即使我的应用程序是前台,它也会创建notificatins。但我希望它只在我的应用程序是后台或停止时创建通知。
你能告诉我实施它的最佳方法吗?
答案 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()当活动被另一个应用程序覆盖或者可靠地回到前面时被调用。然后,您可以在服务上设置公共变量或调用函数。