在我的主要活动中,我绑定了一个服务。
//main activity class
public void startNotificationService(){
// add notice service
Context appContext = getApplicationContext();
Intent intent = new Intent(appContext,NotificationService.class);
appContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
当创建服务时,广播接收器被注册,因此当Android框架发送广播时,服务可以捕获它并推送通知。
// service class
@Override
public void onCreate() {
handlerMessage = new UnsolicitedMessageHandler();
IntentFilter intentFilter = new IntentFilter("disassociation");
intentFilter.addAction("remediation");
registerReceiver(new UnsolicitedMessageHandler (), intentFilter);
}
以下是广播接收器的句柄类
class UnsolicitedMessageHandler extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String message;
if (action.equals("disassociation")) {
message = intent.getStringExtra("frameName");
showNotification(R.drawable.disconnect,
"Disassocation Notification", message);
}
if (action.equals("remediation")) {
message = intent.getStringExtra("remMsg");
showNotification(R.drawable.scan, "Remediation Notification",
message);
}
}
}
一切正常,问题是每当我杀死应用程序并再次午餐时,UnsolicitedMessageHandler收到广播(我知道,系统绝对不发送广播) 这真的令人困惑和沮丧。有人可以帮帮我吗?谢谢你。
答案 0 :(得分:2)
我认为这是因为每当你再次杀死并启动你的应用程序时,你就会收到STICKY brodcast。
在onReceive中使用isInitialStickyBroadcast()来检查你正在处理的当前brodcast是否是STICKY。如果那是STICKY那么就忽略并且不进行处理