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

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