很高興也很無奈的做一個BLE的項目,高興的是BLE是未來的一種趨勢,有了這個經驗以后可以混口飯吃,無奈的是身為一個Android developer android系統對ble的支持實在是太差了。在經歷了三星的4.1,4.2 和最新的4.3之后生出了一種前所未有的迫切想轉行IOS的想法,因為Android的ble真是太要命了。發了這么多牢騷,活還是要干的。這篇博客主要是為了記錄一下開發情況以及過程,便于以后開發的時候查看,有興趣的同學也可以瞅瞅。
首先是現在BLE的開發情況(截止到今天2013-11-08),現在Android ble開發一般分為四個版本:
1、三星的4.0 和 4.1系統 。這個版本的ble開發沒有官方的支持,只是三星說我的某些手機支持ble。然后民間的一些大神們開發反編譯三星的rom,找到了一系列的三星未開放的關于ble的方法。可以通過反射調用也可以通過導入一些反編譯的jar包(基本沒用就不上傳了)來調用。但是經過1一個半月的折磨,終于發現連接太不穩定了,根本就不能拿來當產品。
2、MOTO放出的sdk。這個版本我沒有接觸過不知道怎么樣,不多說只是提一下。
3、三星的4.2系統。大概是看到程序猿們太辛苦了(只是自己YY而已),三星放出了官方的SDK。但是這個sdk只支持三星自己的4.2的手機。三星雖然出貨多但是android陣營的手機品牌實在是太多了三星的4.2又太少,加上當時有傳聞google4.3很快就要發布,包含4.3的API。所以這個版本的ble我沒做過,不過貌似做這個版本的人還不少。
4、萬眾期待的Android4.3。這個版本是現在最流行的,因為是google官方的所以只要是每個手機官方的4.3系統都可以用BLE的API。有的同學會刷4.3的系統也可以開發,這是因為rom里面包含了適合手機藍牙的驅動。如果你的手機用了一款很偏的藍牙芯片,而rom里面又沒有這款芯片的驅動 ,那么恭喜你----4.3的API依然不好用。但是目前來看大多數手機還是沒問題的像小米三星等。
介紹完了BLE的情況,就可以選擇版本開發了。很多人想做通用版的,但是本人技術有限做不了通用版的。所以如果有哪位大神偶爾看到這篇blog而且已經做出通用版的了,請讓我抱個大腿!
除去各個版本不談,ble的開發還是比較簡單的,但是還是要大體了解BT4.0關于Low Energy的一些協議(GATT)。一個BLE設備包含很多的服務(BLUETOOTHSERVICE),每個服務又包含很多的特征(characteristic),每個characteristic包含3個value。characteristic可以是可讀寫的、只讀、只寫、或者通知類型,還有一個什么類型我忘了- -!因為我從來沒用到過。每個服務和characteristic都有一個UUID來唯一確定,所有想要開發BLE必須知道你想要用哪個服務的那個characteristic也就是要知道對應的UUID。很多人說我傳的demo不好用,就是因為UUID都不換成自己設備的。
具體流程就是 scan(搜索) --> connect(連接) --> discoverService(發現ble設備的服務)--> 遍歷service里的characteristic -->讀寫characteristic。
由于每個版本的方法名稱不一樣實現邏輯不一樣,就不給大家寫代碼了只發兩個版本的demo,但是走的流程都是一樣的。
三星的4.0 4.1demo看看就好 基本沒人用了 SamsungDemo1 這個demo要改UUID
Android4.3demo 這個demo是4.3的可以研究一下,包含了讀寫以及通知 android4.3
關于android4.3 還有兩點要說的: 1、最好做到從手機端發出去的每個命令之間最好sleep一段時間。 2、android端與設備保持連接可能要占用cpu,所以設備端中斷最好不要太頻繁 亂七八糟的先寫到這,有時間好好整理一下。有什么進度也會更新過來。 2013/12/12 1、感覺三星的藍牙協議棧跟google的不一樣,用三星的協議棧不存在設備中斷太多會出133的issue。 2、各個手機原版4.3rom比自己刷的穩定的多,Nexus4/5 note2泄露版這些官方rom里 像多個設備快速發命令時可以不用添加sleep 但是小米刷的4.3就必須添加sleep要不然會出133。個人觀點,如果有朋友知道原因的希望可以解答一下。
|