關(guān)于: 安卓能否與iphone通過藍牙4.0(BLE)通訊?
安卓手機與iphone能通過藍牙4.0進行連接嗎? 不是說都開放了各自的藍牙API么?
iphone給安卓發(fā)數(shù)據(jù), 在安卓上可以發(fā)現(xiàn)iphone的服務(wù)(Service)和特征(Characteristics), 但是connect了幾秒鐘, 后面又斷開了, 感覺有些不穩(wěn)定啊
===============================================================
結(jié)論是:
截止到Android4.4.2,通過BLE(藍牙4.0), 安卓手機和iphone之間, ,無法進行數(shù)據(jù)的傳輸.
其實理論上是可以, 并且在Google的官方文檔上也說可以, 但是實際上是不行的, 當(dāng)時看了官方的文檔說可以, 覺得沒問題, 結(jié)果鉆研了2個星期發(fā)現(xiàn)壓根不行, 真是浪費了不少的時間, 希望后來的朋友看到后能夠懸崖勒馬啊, 如果有一天可以實現(xiàn)互通了,還請各位朋友第一時間站內(nèi)信告訴我哈 (我平常事情也不少, 并不只研究藍牙這一塊)
重要補充:
根據(jù)最新的消息:
Android L(也就是Android 5.0)上, 可以讓安卓設(shè)備做為外設(shè)(Peripheral)?了, 據(jù)說能夠?qū)崿F(xiàn)iOS與Android的互通了(本人沒親測), 但Android5.0的普及, 估計還需要一段時間
===============================================================
原因:
Android4.3 規(guī)范了BLE的API离陶,但是直到目前的4.4,還有些功能不完善。
在BLE協(xié)議標準中,有兩個角色亮曹,外圍設(shè)備(Periphery)和中心設(shè)備(Central);外設(shè)是數(shù)據(jù)提供者(發(fā)數(shù)據(jù)的), 比如可穿戴設(shè)備, 血糖儀, 手環(huán), 等等有藍牙4.0的芯片的設(shè)備然低,中心設(shè)備是數(shù)據(jù)使用/處理者(收數(shù)據(jù)的)英遭;
在iOS SDK里面,可以把一個iOS設(shè)備作為一個外設(shè)(常用來模擬各種可穿戴設(shè)備)企蹭,也可以作為一個中央白筹;
但是在Android SDK里面,直到目前最新的Android4.4.2谅摄,Android手機只能作為中心設(shè)備來使用和處理數(shù)據(jù)遍蟋;
So:
安卓(4.4.2)只能單向建立連接: 它只能作為中心設(shè)備收數(shù)據(jù), 無法以Peripharal的身份發(fā)數(shù)據(jù) (只能當(dāng)大爺啊..).
在安卓發(fā)數(shù)據(jù)時: 它發(fā)出去的數(shù)據(jù)命令包, 無法被iOS設(shè)備讀懂
現(xiàn)象:
通過抓取安卓的HCI Log, 發(fā)現(xiàn):
安卓設(shè)備發(fā)了一個以0x02開頭的連接請求包(L2CAP信號包), 而iOS設(shè)備回了一個以0x01開頭的拒絕命令包(并附帶原因: 指令錯誤 command not understood),
分析一下發(fā)現(xiàn):
安卓通過 "L2CAP協(xié)議第5通道"(一個藍牙2.0的通訊通道) , 發(fā)送了一個請求連接的命令(以0x02開頭的那個包),
它之所以這么做, 是因為iOS設(shè)備發(fā)數(shù)據(jù)的時候 , 發(fā)出的數(shù)據(jù)包中, 有1 bit的標志位沒有發(fā), 這樣肯定就會產(chǎn)生誤會, 少了這個標志位, 在安卓端就代表: 不支持BLE,僅支持BR/EDR(藍牙2.0)
SO:
結(jié)果就是: 安卓錯誤的去用BR/EDR的信號通道發(fā)數(shù)據(jù), 這不用說, 肯定會讓連接崩掉的
最終解決方案:
等待新版iOS SDK的發(fā)布, 能在底層發(fā)數(shù)據(jù)的時候, 把那1bit的標志位補上
等待Android 新版SDK, 讓其能夠忽略那1bit的標志位, 不用傳統(tǒng)藍牙模式傳輸, 而直接用低功耗BLE傳輸
========================================The End===============================================
?吐個槽:
整了2個星期, 得出的結(jié)論就是iphone手機和android手機, 無法進行藍牙通訊, 找出了android底層的和iOS底層的小bug, 額, 感覺是給Google和蘋果干活的, 而且一分錢還都沒有.... 能不能不要這么苦逼啊..囧....