Android藍芽BLE4 0踩過的坑

2021-08-29 03:55:30 字數 2387 閱讀 5960

一直都負責專案的藍芽模組,期間踩過很多坑,說出來跟大家分享一下。

1. 從簡單的開始,首先是許可權的問題,在android6.0以上,部分機型需要開啟定位許可權,部分機型需要同時開啟gps。所以使用藍芽之前,你可以動態申請定位許可權,或者直接將targetsdkversion設定為23以下。

2. 藍芽剛開啟的時候,建議間隔1s後再進行搜尋,有些機型初始化很慢,會搜尋不到裝置。

3. 始終無法搜尋裝置,可能是上一次連線殘留的藍芽快取導致的,重啟藍芽試一試。

4. 搜尋方法需要區分android版本。21以下呼叫.startlescan(lescancallback),21及其以上呼叫:

scansettings mscansettings = new scansettings.builder()

.setscanmode(scansettings.scan_mode_low_latency)

.setreportdelay(0)

.build();

listmfilters = new arraylist<>();//搜尋藍芽過濾uuid

scanfilter scanfilter = new scanfilter.builder()

.setserviceuuid(parceluuid.fromstring("*********x"))

.build();

mfilters.add(scanfilter);

if (scanner == null)

scanner.startscan(mfilters, mscansettings, scancallback);

5. 搜尋結束後,最好間隔1s後在連線。部分機型可能會在搜尋後重新整理藍芽快取,導致連線失敗。

6. 連線方法也需要做相應的判斷處理:

if (build.version.sdk_int >= build.version_codes.m)  else
7. 連線失敗,或者連線斷開後,必須及時關閉bluetoothgatt,具體操作如下:

public void closegatt()

}public static boolean refreshgattcache(bluetoothgatt gatt)

}} catch (exception e)

return result;

}

8. 在onconnectionstatechange檢測到133錯誤,需要關閉gatt。如果返回bluetoothprofile.state_connected,間隔1s後再呼叫gatt.discoverservices(),只有在onservicesdiscovered返回bluetoothgatt.gatt_success才能說明裝置連線成功,其他狀態需要關閉gatt,以免下次搜尋連線不上裝置。

9. 執行notify()後,oncharacteristicchanged方法才能接收到裝置返回的資料

//具體的uuid需要參考你們自己的藍芽協議

try

bluetoothgattcharacteristic characteristic = bgservice

.getcharacteristic(uuid.fromstring(character));

if (characteristic == null)

int properties = characteristic.getproperties();

if ((properties & bluetoothgattcharacteristic.property_notify) == 0)

bluetoothgatt.setcharacteristicnotification(characteristicuuid, true);

bluetoothgattdescriptor descriptor = characteristic.getdescriptor(uuid);

if (descriptor != null)

} catch (nullpointerexception e)

11. 有時候你明明關閉了gatt,但最後死活搜尋不到該裝置。原因也很簡單,系統並未執行成功,還殘留著該gatt的引用。目前本人除了重啟手機藍芽,想不到有更好的方法。在網上看到有個大神寫過一篇部落格,裡面有詳細介紹,鏈結參見下面。

但實際使用中會引發一些問題,比如裡面通過反射關閉藍芽和開啟藍芽,實際使用發現關閉藍芽後可能會導致手機無法搜尋到任何裝置,反覆呼叫開啟藍芽才恢復正常(猜測是系統未能對開啟的操作執行成功)。聽說android9將取消反射的方法,也不知道是真是假。

12. 一段時間內,不要過於頻繁的搜尋裝置。一方面搜尋過程中,不要反覆呼叫搜尋的方法,加標識進行判斷;另一方面,當次搜尋的時長盡可能長一點,比如10s。

藍芽後台接收資料 BLE4 0

最近在做乙個藍芽相關的專案,需要在應用進入後台,或者手機屬於鎖屏狀態的情況下,仍然保持藍芽連線,並且能正常接收資料。本來以後會很麻煩,但是學習了下.發現就2步而已。簡單的不能再簡單了。好了。下面是具體實現辦法。1.在 info.plist檔案中,新建一行required background mod...

藍芽BLE4 0透傳 智慧型穿戴應用

隨著技術改革公升級和消費觀念公升級,智慧型穿戴產品從過去單一功能向多功能化發展,同時具有更便攜 實用的特點。加入骨感測 人臉識別 地理定位等各種感測器,可以多方位多角度獲取資料資訊。甚至接入語音 體感等人機介面,實現更方便更靈活的互動體驗。智慧型穿戴產品採用的互聯方式主要有nfc wifi 藍芽。n...

iOS開發 藍芽後台接收資料 BLE4 0

最近在做乙個藍芽相關的專案,需要在應用進入後台,或者手機屬於鎖屏狀態的情況下,仍然保持藍芽連線,並且能正常接收資料。本來以後會很麻煩,但是學習了下.發現就2步而已。簡單的不能再簡單了。好了。下面是具體實現辦法。1.在 info.plist檔案中,新建一行required background mod...