关于服务:Android广播接收器,每次启动应用程序都会接收广播

Android broadcast receiver, receive a broadcast every time when app launched

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

1
2
3
4
5
6
7
    //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框架何时发送广播,该服务都可以捕获该广播并推送通知。

1
2
3
4
5
6
7
8
    // service class
    @Override
    public void onCreate() {
    handlerMessage = new UnsolicitedMessageHandler();
    IntentFilter intentFilter = new IntentFilter("disassociation");
    intentFilter.addAction("remediation");
    registerReceiver(new UnsolicitedMessageHandler (), intentFilter);
}

以下是广播接收器的句柄类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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都会接收到广播(我知道,系统绝对不会发送广播)
确实令人困惑和沮丧。有人可以帮助我吗?致谢。


我认为这是因为每当您杀死并再次启动您的应用时,您都会收到STICKY广播。

在onReceive中,使用isInitialStickyBroadcast()来检查您正在处理的当前广播是否为STICKY。如果那是STICKY,则忽略并不进行任何处理