Android广播接收器,每次启动应用时都会收到广播

时间:2013-10-16 08:17:24

标签: android service callback bind broadcast

在我的主要活动中,我绑定了一个服务。

    //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收到广播(我知道,系统绝对不发送广播) 这真的令人困惑和沮丧。有人可以帮帮我吗?谢谢你。

1 个答案:

答案 0 :(得分:2)

我认为这是因为每当你再次杀死并启动你的应用程序时,你就会收到STICKY brodcast。

在onReceive中使用isInitialStickyBroadcast()来检查你正在处理的当前brodcast是否是STICKY。如果那是STICKY那么就忽略并且不进行处理