flutter 藍牙開發(fā)遇到的坑
創(chuàng)新互聯(lián)是專業(yè)的辛集網(wǎng)站建設(shè)公司,辛集接單;提供網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行辛集網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
最近在做個flutter藍牙功能,用的flutter_blue,在iOS上沒有任何問題,照著例子寫完,正常運行藍牙功能,但是在安卓上發(fā)現(xiàn)各種坑,用這個插件首先是有些設(shè)備拿不到設(shè)備名稱,還有就是讀寫特征和ios上拿到的也不一樣。折騰好久,最后在github上找到外國友人給出的方案,就是用flutter_bluetooth_serial這個插件可以解決以上問題,就試了一下,結(jié)果真可以解決問題,而且這個用法感覺比flutter_blue 更強大,不需要通過讀寫特征值進行通訊,直接就能通過connection寫入和接收數(shù)據(jù)。做下記錄,希望能幫到有同樣問題的人。因為我在遇到問題時,百度了全是不能解決問題的辦法。
于是就有了寫作本文的動力,--------解決同時連接多臺藍牙設(shè)備!!!
flutter_blue 適合于單臺的藍牙設(shè)備,使用起來簡單
flutter_reactive_ble 適合于單臺的藍牙設(shè)備,多臺藍牙設(shè)備也可以用
flutter_ble_lib 適合于單臺的藍牙設(shè)備,多臺藍牙設(shè)備也可以用,可以在模擬器上進行調(diào)試藍牙
感覺后2個第三方庫都可以使用,本人先入為主使用了flutter_reactive_ble,所以本文以flutter_reactive_ble為基礎(chǔ)進行介紹
先聲明4個全局變量,后面會用到
開始掃描
如果掃描過程,不使用過濾條件,withServices這個參數(shù)可以給個空數(shù)組
停止掃描如下
連接設(shè)備
斷開設(shè)備,
每連接成功一個設(shè)備后,就會產(chǎn)生一個_connectionStreamSubscription,對應(yīng)設(shè)備的斷開,就用對應(yīng)的StreamSubscription去斷開, 可以用一個HashMap,去記錄 連接成功的設(shè)備 與 StreamSubscription 的對應(yīng)關(guān)系
去掃描服務(wù),并過濾服務(wù),掃描結(jié)果服務(wù)里面是包含有特征的數(shù)組,如: serviceId:[fff0,fff1,fff2,fff3,...]
去監(jiān)聽上報來的數(shù)據(jù),參數(shù)來自前面掃描到的結(jié)果serviceId--服務(wù)ID, characteristicId--特征ID,deviceId--設(shè)備ID
后面就是各位看官根據(jù)自己的需求去做邏輯處理啦。
對設(shè)備設(shè)置命令,發(fā)送請求(寫操作),list為整形數(shù)據(jù),要寫的數(shù)據(jù)
讀取設(shè)備的信息(讀操作)
flutter 多臺藍牙設(shè)備同時連接的分享就到這里嘍,小伴們,覺得有點用的話,或者已經(jīng)看到這里面來的請點個贊吧~~ 后續(xù)分享更多有關(guān)flutter的文章。如果有疑問的話,請在下方留言~
過一段時間后,我在項目把這個藍牙庫用起來了,基本能滿足日常需求.效果如下:
最近在寫flutter應(yīng)用,需要集成藍牙功能,用了一個第三方的庫,踩了一些坑,做一下記錄。
這是庫的地址 PhilipsHue/flutter_reactive_ble: Flutter library that handles BLE operations for multiple devices. (github.com)
安卓主要的坑就是,在使用藍牙功能的時候,需要獲取定位權(quán)限,這個需要動態(tài)獲取。
集成之后,編譯出錯,提示Swift Compiler Error。
(1)首先嘗試,修改對應(yīng)三方庫的Swift編譯版本。
我這邊嘗試修改,沒有成功。
(2) 沒辦法,我這邊手動修改三方庫的源碼文件,進行修復(fù)。重新編譯成功。
其他問題
Android:
添加藍牙/定位權(quán)限
文件地址:Flutter項目文件夾/android/app/src/main/java/AndroidManifest.xml
iOS:
添加藍牙權(quán)限
文件地址:Flutter項目文件夾/ios/Runner/Info.plist
運行Flutter 在Android端安裝的時候Androidstudio提示這個錯誤:
原因:出現(xiàn)這個錯誤的原因是我引入的第三方庫最低支持版本高于我的項目的最低支持版本,異常中的信息顯示:我的項目的最低支持版本為,而第三方庫的最低支持版本為x),所以拋出了這個異常。
解決辦法:文件地址:Flutter項目文件夾/android/app/src/main/java/AndroidManifest.xml
中添加
問題出現(xiàn)在Android端,連接藍牙設(shè)備后,匹配特征值的時候
報:set_notification_error,編寫描述符時出錯。
原因:
我個人的分析,設(shè)備是使用標(biāo)準(zhǔn)的Android API用于藍牙,必須等待回調(diào),該回調(diào)表明之前的GATT操作已完成(onDescriptorWrite),直到可以編寫下一個描述符以啟用特征通知。也就是程序有個通過特征性UUID比較的工作順序,由于信號不好,或者是信號緩沖之類的原因,造成藍牙可能流程一步一步走不下來。
解決:
setNotifyValue(true) 添加延時操作