坑爹的Android Ble問題記錄日誌

開發Ble(公司項目,防丟器)已經有一段時間,由於是第一次接觸Ble而網上資料又不多,且android平臺自身的差異性,遇到了很多問題。爲了將來方便查閱,在此做下記錄。
1.中興手機,藍牙手動斷開後,無法再次鏈接問題。(可能別的手機也存在類似問題)
解決辦法: 在連接gatt之前,對bluetoothadapter進行一次scan 順利解決此問題。

2.Gatt鏈接不穩定(在部分手機上出現過,此問題先排除硬件問題。此處只針對自己遇到的情況,或許有別的方案,待補充)
解決辦法: 由於用到了gattserver,在啓動gattserver和連接gatt之間由於未做順序的限制,導致了此問題。經過反覆調試後,發現只需要先創建gattserver,在serviceadded之後,在去進行gatt鏈接,此時的gatt連接會比較穩定。

3.小米手機遇到的,在gatt連接之後,手動調用gatt.disconnect  和 close。第二次鏈接後 自動斷開,再次連接會重新綁定。
解決辦法:也是無意中,看到一篇文章,寫的是小米手機在gatt操作的時候 ,最好要做一下sleep操作,可能是因爲小米底層對藍牙的某些東西沒有來得及釋放(自己猜測)。 於是在gatt 連接上時,在gatt.discoverServices 之前,加上 sleep(500) ,發現斷開後在連接 成功率大大提高。

2014-11-14
4.藍牙關閉和打開變得異常緩慢,甚至崩潰
此問題可能與當藍牙關閉時,尚有爲關閉的 gatt連接/gattserver。我的解決辦法是,註冊藍牙狀態的監聽,當發現藍牙狀態變爲BluetoothAdapter.STATE_TURNING_OFF 時,立刻釋放所有的gatt連接,關閉gattserver。經不完全測試發現,藍牙的關閉速度變得快多了。

5.當批量連接藍牙時,不進行onConnectionStateChange 回調。
這個問題是自己 閒的蛋疼,在測試的時候,用了很多假的mac 地址。於是造成的後果可想而知,肯定的是連不上的。但是同時也發現了問題,當ble去連接一個不存在的mac,或者不在範圍內的mac地址時,發現有時候 不會進行onConnectionStateChange的回調,覺得很蛋疼。個人覺得會不會是因爲 ,同時發送的connectGatt 請求太多,導致了系統的藍牙阻塞或者別的什麼問題。沒辦法,既然發現了這個問題,就只好動手解決了。  首先,我在批量連接connectGatt的時候,新增了一個掃描,只有當 要連接的 設備掃描到了,才進行連接。然後,我還對gatt的連接,做了一個同步(每次只能進行一個連接,上一個連接不結束的話,無法開始上一個連接,同時針對連接無回調的情況做了超時處理,超時的話立馬釋放當前連接)。 這麼說可能感受不是很直觀。但個人覺得,在操作手機藍牙的時候,還是做個同步的好。 避免同時發生多個gatt的操作,倒是手機藍牙奔潰等情況的發生。


2014-11-266.Gatt鏈接不穩定 二

最近因爲在保存gatt連接狀態的serveice中,增加了一個後臺的lescan,突然發現gatt連接又變的不穩定了,不知道什麼原因。走投無路的情況下,把後臺的lescan放到另一個service中進行,發現好像gatt又變得穩定多了,目前測試下來 已經連了40分鐘沒有斷開了。 不知道接下去會咋樣。  也不知道是不是因爲在同一個線程中在gatt連接成功後,開啓lescan會導致連接不穩定,或亦是手機本身的原因,希望高人指教。

原文地址:http://www.cnblogs.com/xiaorenwu702/p/4307380.html

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