Android 同一个广播接收到两次

1.这几天在调试Android Ble 与微信蓝牙设备通讯,其中遇到一个非常难以理解的问题,就是使用Fragment 时,同一个设备通过广播发送的数据,我竟然收到3次广播,o(╥﹏╥)o,情况如下:

I/LeProxy: onCharacteristicChanged() - 45:01:4D:FF:FF:0C uuid=0000fec8-0000-1000-8000-00805f9b34fb
     len=20 [FE 01 00 1A 27 11 00 01 0A 00 18 84 80 04 20 01 28 02 3A 06]
I/LeProxy: onCharacteristicChanged() - 45:01:4D:FF:FF:0C uuid=0000fec8-0000-1000-8000-00805f9b34fb
     len=6 [45 01 4D FF FF 0C]
D/RightFragment: 接收到广播 ============================= FE01001A271100010A0018848004200128023A06
D/WxProtocol: 接收长度 = 20, 数据 = FE01001A271100010A0018848004200128023A06
    当前接收总长度 = 20
    微信协议数据总长度 = 26
D/RightFragment: 接收到广播 ============================= FE01001A271100010A0018848004200128023A06
D/WxProtocol: 接收长度 = 20, 数据 = FE01001A271100010A0018848004200128023A06
    当前接收总长度 = 40
    接收错误数据 = FE01001A271100010A0018848004200128023A06FE01001A271100010A0018848004200128023A06
D/RightFragment: 接收到广播 ============================= FE01001A271100010A0018848004200128023A06
D/WxProtocol: 接收长度 = 20, 数据 = FE01001A271100010A0018848004200128023A06
    当前接收总长度 = 20
    微信协议数据总长度 = 26
D/RightFragment: 接收到广播 ============================= 45014DFFFF0C
D/WxProtocol: 接收长度 = 6, 数据 = 45014DFFFF0C
    当前接收总长度 = 26
    接收完整一包完成,开始处理数据
D/WxProtocol: 接收完整一包数据 = FE01001A271100010A0018848004200128023A0645014DFFFF0C
    微信协议登录验证 = FE01001A271100010A0018848004200128023A0645014DFFFF0C
D/RightFragment: 微信协议发送 = FE0100124E2100010A06080012024F4B1200
D/AndroidRuntime: Shutting down VM
    

2. 后来发现,出现问题的原因可能是以下两种情况:
2.1  创建了多个广播接收者。
2.2 接收者(同一个)多次注册。

3. 解决问题的办法:

3.1 在Activity 和 Fragment 中,广播接收者的创建与注册不要在onStart()或者onResume()等这种,会被重复调用的方法中执行。放在onCreate(),确保都是执行一次,这样子就不会重复注册同一个广播接收者。

3.2 对于广播接收者的使用,无论是在Fragment  还是 Activity 中,registerReceiver 和 unregisterReceiver, 一定要配对使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章