Android 同一个广播接收到两次

22 篇文章 0 订阅

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, 一定要配对使用。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值