欧美综合天天夜夜久久|精品亚洲一区二区不卡|亚川色精品一区二区三区|国产做无码视频在线观看|中文国产成人精品久久无码|国产高清精品福利私拍国产|国产精品自在线拍国产手机版|亚洲国产日韩一区无码—夜夜嗨

ios藍(lán)牙app開發(fā)教程(iOS連接藍(lán)牙)

軟件開發(fā) 4506
本篇文章給大家談?wù)刬os藍(lán)牙app開發(fā)教程,以及iOS連接藍(lán)牙對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 iOS 低功耗藍(lán)牙4.0開發(fā)指南。 1.什么是藍(lán)牙4.0,藍(lán)牙其它標(biāo)準(zhǔn)又是什么? 詳細(xì)描述:低功耗藍(lán)牙(Low Energy; LE),又視為Bluetooth Smart或藍(lán)牙核心規(guī)格4.0版本。其特點具備節(jié)能、便于采用,是藍(lán)牙技術(shù)專為物聯(lián)網(wǎng)(Internet of Things; IOT)開發(fā)的技術(shù)版本。所以它最主要的特點是低功耗,普及率高?,F(xiàn)在所說的藍(lán)牙設(shè)備,大部分都是在說4.0設(shè)備,ble也特指4.0設(shè)備。 在4.0之前重要的版本有 2.1版本-基本速率/增強數(shù)據(jù)率(BR/EDR) 和 3.0 高速藍(lán)牙 版本,這些統(tǒng)稱為經(jīng)典藍(lán)牙。4.0還有4.1和4.2的小版本,其中4.2版本對傳輸速率做了進一步他提升,提高了2.5倍,蘋果從iphone6開始使用4.2,最新的藍(lán)牙標(biāo)準(zhǔn)為藍(lán)牙5.0,其中最大的特點連接范圍擴大了4倍,速度又提高了2倍,無連接數(shù)據(jù)廣播能力提高了8倍,增加了藍(lán)牙組網(wǎng)的能力。

本篇文章給大家談?wù)刬os藍(lán)牙app開發(fā)教程,以及iOS連接藍(lán)牙對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。

iOS 低功耗藍(lán)牙4.0開發(fā)指南。

1.什么是藍(lán)牙4.0,藍(lán)牙其它標(biāo)準(zhǔn)又是什么?

詳細(xì)描述:低功耗藍(lán)牙(Low Energy; LE),又視為Bluetooth Smart或藍(lán)牙核心規(guī)格4.0版本。其特點具備節(jié)能、便于采用,是藍(lán)牙技術(shù)專為物聯(lián)網(wǎng)(Internet of Things; IOT)開發(fā)的技術(shù)版本。所以它最主要的特點是低功耗,普及率高?,F(xiàn)在所說的藍(lán)牙設(shè)備,大部分都是在說4.0設(shè)備,ble也特指4.0設(shè)備。 在4.0之前重要的版本有 2.1版本-基本速率/增強數(shù)據(jù)率(BR/EDR) 和 3.0 高速藍(lán)牙 版本,這些統(tǒng)稱為經(jīng)典藍(lán)牙。4.0還有4.1和4.2的小版本,其中4.2版本對傳輸速率做了進一步他提升,提高了2.5倍,蘋果從iphone6開始使用4.2,最新的藍(lán)牙標(biāo)準(zhǔn)為藍(lán)牙5.0,其中最大的特點連接范圍擴大了4倍,速度又提高了2倍,無連接數(shù)據(jù)廣播能力提高了8倍,增加了藍(lán)牙組網(wǎng)的能力。

2.藍(lán)牙開發(fā)必須知道的概念。

2.1.1 central和peripheral:

藍(lán)牙應(yīng)用開發(fā)中,存在兩種角色,分別是central和peripheral(p?’r?f?r?l) ,中文就是中心和外設(shè)。比如手機去連接智能設(shè)備,那手機就是central,智能設(shè)備就是peripheral。大多時候都是central去連接peripheral的場景。

2.1.2 廣播和連接:

peripheral會發(fā)出廣播,central掃描到廣播后,可以對設(shè)備進行連接,發(fā)出connect請求,peripheral接收到請求后,同意連接后,central和peripheral就建立了連接。

2.1.3?連接后的操作:

write,read,notify,indecate, response or not …

indecate和notify的區(qū)別就在于,indecate是一定會收到數(shù)據(jù),notify有可能會丟失數(shù)據(jù)(不會有central收到數(shù)據(jù)的回應(yīng)),write也分為response和noresponse,如果是response,那么write成功回收到peripheral的確認(rèn)消息,但是會降低寫入的速率。

2.1.4 協(xié)議:

每個具體的智能設(shè)備,都約定了一組數(shù)據(jù)格式,這個就是數(shù)據(jù)協(xié)議,例如手環(huán)中獲取到數(shù)據(jù)0X001023,其中第2位到第5位表示步數(shù),那么就2310就是步數(shù)的16進制的數(shù)據(jù),轉(zhuǎn)換成10進制就是8976步,需要注意的是,設(shè)備端都是小端模式,所以取4位時候,高字節(jié)在前低字節(jié)在后。

3. iOS藍(lán)牙應(yīng)用的一般開發(fā)流程。

4. 藍(lán)牙的數(shù)據(jù)交互。

write,read,notify,indecate, response or not … 都是容易理解的,indecate和notify對應(yīng)的是長連接,建立indecate后,peripheral可以隨時往central發(fā)送數(shù)據(jù)。

indecate和notify的區(qū)別就在于,indecate是一定會收到數(shù)據(jù),notify有可能會丟失數(shù)據(jù)(不會有central收到數(shù)據(jù)的回應(yīng)),write也分為response和noresponse,如果是response,那么write成功回收到peripheral的確認(rèn)消息,但是會降低寫入的速率。

對于一個charateristic,他的讀寫訂閱的權(quán)限是peripheral決定的,熟悉可以被同時設(shè)置,一般會根據(jù)外設(shè)的功能來決定。

5.藍(lán)牙ota DFU。

藍(lán)牙ota,DFU(Device Firmware Update)指的是藍(lán)牙設(shè)備的固件升級,其實是一整套流程,不同的藍(lán)牙芯片,ota的流程有不同之處,我這里用ti的芯片舉例。步驟為:切系統(tǒng)(bootloader mode),重啟,傳輸數(shù)據(jù),驗證數(shù)據(jù),切系統(tǒng),重啟,完成。

其中數(shù)據(jù)傳輸也會分成很多節(jié)去發(fā)送,沒法送一段數(shù)據(jù),做一次數(shù)據(jù)校驗。

6.ota存在的問題。

每個智能設(shè)備的速率,功耗,存儲都會有很多限制,導(dǎo)致很多設(shè)備會自己去實現(xiàn)ota的功能,自定義流程和數(shù)據(jù)傳輸方式,導(dǎo)致許多設(shè)備都是有自己私有的ota模式和協(xié)議,所以在做開發(fā)的時候,要仔細(xì)閱讀設(shè)備協(xié)議中對ota的描述。

7.如何做自動重連。

只需要在設(shè)備斷開連接的委托方法中,重新調(diào)用gatt.connet或者是centralManager.connet方法就可以了,無論當(dāng)時設(shè)備是否有點,是否在周圍,當(dāng)設(shè)備再次開會或者連接到可連接范圍內(nèi),都會自動被連上。

8.連接失敗處理。

分兩個平臺來說,iOS端也有連接失敗的委托,但是好像幾乎不會發(fā)生這種情況,而對于同款設(shè)備,android常常會出現(xiàn)連接失敗的情況,status != BluetoothGatt.GATT_SUCCESS,android端開發(fā)請不要把連接失敗和斷開連接放在一塊處理,因為斷開連接可以直接嘗試重新連接,而連接失敗后嘗試重新連接,需要加一些延時,并且需要gatt.close,清空一下狀態(tài),否則會把gatt阻塞導(dǎo)致手機不重啟藍(lán)牙就再也無法連接任何設(shè)備的情況 。

9.后臺運行。

iOS后來運行,需要設(shè)備中info.Plist權(quán)限,key:Required background modes ,value: bluetooth-central(手機作為central) , bluetooth-peripheral。

10.同時連接多個設(shè)備。

使用同一個CBCentralManager,通過進入委托的peripheral的identifier區(qū)分不同的設(shè)備,進行不同的操作和處理。

11.掃描廣播包。

所有外設(shè),只有在發(fā)出廣播包的情況下,才能被central發(fā)現(xiàn),絕大多數(shù)情況下,外設(shè)被連接后就不會發(fā)出廣播(也有例外),很多人遇到無法找到設(shè)備的問題,大多屬于這種情況。

12.提高藍(lán)牙連接速度。

無論是iOS,還是android,都可以通過已綁定的設(shè)備,在不開啟掃描的情況下進行快速連接,iOS需要的參數(shù)是peripheral的identifier,android需要mac地址。但android和iOS還是有一些區(qū)別的,比如iOS不能拿到已綁定的設(shè)備list,但是可以通過UUID去拿到peripheral的實例。而android可以拿到已綁定的設(shè)備list。android綁定過程需要手動調(diào)用createBond的方法,而iOS在連接成功一次后會自動綁定。 android在處理createBond時,常常會應(yīng)為不同手機平臺,不同設(shè)備,會產(chǎn)生兼容性的問題,這點需要注意。

13.定向掃描。

在掃描時候可以傳入serviceUUID,這樣可以掃描到特定條件的設(shè)備,提高掃描的速度,排除干擾。

14.如何獲取mac地址。

而iOS出于蘋果的安全策略問題,無法直接獲得mac地址,只能得到一個mac地址換算出來的identifier。

iOS 藍(lán)牙開發(fā)(一)

iOS 藍(lán)牙開發(fā)(二)

iOS 藍(lán)牙開發(fā)(三)

iOS 藍(lán)牙開發(fā)(四)

在iOS中藍(lán)牙相關(guān)實現(xiàn)都是在CoreBluetooth這個framework中的,所以我們創(chuàng)建一個單例類中需要先導(dǎo)入 #import CoreBluetooth/CoreBluetooth.h ,再后即可使用這個單例類進行管理我們藍(lán)牙的掃描、連接、狀態(tài)等實現(xiàn)。

當(dāng) central.state 為CBManagerStatePoweredOn即可開始掃描, 具體方法 [self.centralManager scanForPeripheralsWithServices:nil options:nil] 當(dāng)調(diào)用 scanForPeripheralsWithServices:options: 函數(shù)時就會實時調(diào)用其代理方法 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

peripheral 是外設(shè)類 advertisementData 是廣播的值,一般攜帶設(shè)備名, serviceUUID 等信息。 RSSI 絕對值越大,表示信號越差,設(shè)備離的越遠(yuǎn)。如果想裝換成百分比強度, (RSSI+100)/1001 (這是一個約數(shù),藍(lán)牙信號值并不一定是-100 - 0的值)

藍(lán)牙的連接是當(dāng)中心設(shè)備掃描到可用外設(shè)后, 利用函數(shù) [self.centralManager connectPeripheral:peripheral options:nil]; 進行鏈接, 當(dāng)函數(shù)被調(diào)用后, 就會回調(diào)其對應(yīng)的代理函數(shù)。

本篇筆記主要是記錄如何初始化藍(lán)牙的 CBCentralManager 的中心管理類,并記錄如何實現(xiàn)掃描周邊外設(shè)、如何鏈接、獲取藍(lán)牙當(dāng)前狀態(tài)。

iOS藍(lán)牙開發(fā):藍(lán)牙連接和數(shù)據(jù)讀寫

當(dāng)下藍(lán)牙開發(fā)可謂是越來越火,不論是智能穿戴的興起還是藍(lán)牙家具,車聯(lián)網(wǎng)藍(lán)牙等等,很多同學(xué)也會接觸到藍(lán)牙的項目,我從事藍(lán)牙開發(fā)也有一段時間了,經(jīng)手了兩個項目。廢話不多說了,先向大家簡單的介紹有關(guān)藍(lán)牙開發(fā)的知識。藍(lán)牙低能耗(BLE),以下介紹的都是圍繞iOS的 CoreBluetooth/CoreBluetooth.h 框架展開的。

藍(lán)牙開發(fā)分為中心者模式和管理者模式:1.常用的(其實99.99%)就是使用中心者模式作為開發(fā),就是我們手機作為主機,連接藍(lán)牙外設(shè);2.管理者模式,這個基本用到的比較少,我們手機自己作為外設(shè),自己創(chuàng)建服務(wù)和特征,然后有其他的設(shè)備連接我們的手機。

在做藍(lán)牙開發(fā)之前,最好先了解一些概念:

服務(wù)(services):藍(lán)牙外設(shè)對外廣播的必定會有一個服務(wù),可能也有多個,服務(wù)下面包含著一些特征,服務(wù)可以理解成一個模塊的窗口;

特征(characteristic):存在于服務(wù)下面的,一個服務(wù)下面也可以存在多個特征,特征可以理解成具體實現(xiàn)功能的窗口,一般特征都會有value,也就是特征值,特征是與外界交互的最小單位;

UUID:可以理解成藍(lán)牙上的唯一標(biāo)識符(硬件上肯定不是這個意思,但是這樣理解便于我們開發(fā)),為了區(qū)分不同的服務(wù)和特征,或者給服務(wù)和特征取名字,我們就用UUID來代表服務(wù)和特征。

藍(lán)牙連接可以大致分為以下幾個步驟

1.建立一個Central Manager實例進行藍(lán)牙管理

2.搜索外圍設(shè)備

3.連接外圍設(shè)備

4.獲得外圍設(shè)備的服務(wù)

5.獲得服務(wù)的特征

6.從外圍設(shè)備讀數(shù)據(jù)

7.給外圍設(shè)備發(fā)送數(shù)據(jù)

其他:提醒

首先我們先導(dǎo)入系統(tǒng)的BLE的框架

#import CoreBluetooth/CoreBluetooth.h

必須遵守2個協(xié)議

CBCentralManagerDelegate, CBPeripheralDelegate

/** 中心管理者 */

@property (nonatomic, strong) CBCentralManager *cMgr;

/** 連接到的外設(shè) */

@property (nonatomic, strong) CBPeripheral *peripheral;

1.建立一個Central Manager實例進行藍(lán)牙管理

2.搜索外圍設(shè)備 (我這里為了舉例,采用了自己身邊的一個手環(huán))

3.連接外圍設(shè)備

4.獲得外圍設(shè)備的服務(wù) 5.獲得服務(wù)的特征

6.從外圍設(shè)備讀數(shù)據(jù)

7.給外圍設(shè)備發(fā)送數(shù)據(jù)(也就是寫入數(shù)據(jù)到藍(lán)牙)

這個方法你可以放在button的響應(yīng)里面,也可以在找到特征的時候就寫入,具體看你業(yè)務(wù)需求怎么用啦

其他:提醒

有那么多的特征,我們怎么知道哪些特征是用來讀數(shù)據(jù)的,哪些是用來寫入的,哪些是需要訂閱之后再讀的呢?

如果你們硬件工程師事先告訴你了,或者有完成的開發(fā)文檔,那么就可以直接知道了,否則你就需要自己去查看特征的屬性,推介可以使用下第三方的app——LightBlue,讓你更能清楚的看到你藍(lán)牙里面的服務(wù),特征,特征的屬性。

其他后續(xù)有關(guān)文章,我會慢慢整理發(fā)出來,我也可以回答相關(guān)的問題,有錯誤的地方可以幫忙指出來呦!

iOS藍(lán)牙(BLE4.0低功耗)詳細(xì)滲透講解

嗨大家好,我是iOS開發(fā)一枚大帥比,過去的幾年項目涉及到藍(lán)牙比較多,抽空之余,把使用的小知識點歸納起來,一是方便自己對知識做很好的總結(jié)和復(fù)習(xí),二是希望能幫助到瑯琊開發(fā)的朋友們。

現(xiàn)在的互聯(lián)網(wǎng)時代,智能硬件設(shè)備越來越多樣化,這些設(shè)備中,有多是通過手機來控制硬件設(shè)備,來達到控制的效果,這中間少不了要使用到藍(lán)牙功能,通過藍(lán)牙來通信來控制設(shè)備。也就是我們說的“設(shè)備中心和外設(shè)的故事”。

藍(lán)牙版本介紹:

每個人對于藍(lán)牙都不陌生,近距離數(shù)據(jù)傳輸,方便;可是當(dāng)你的業(yè)務(wù)需求需要你第一次接觸藍(lán)牙開發(fā)的時候,卻會發(fā)現(xiàn)你對它并不了解;首先,藍(lán)牙發(fā)展至今經(jīng)歷了8個版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。那么在1.x~3.0之間的我們稱之為傳統(tǒng)藍(lán)牙,4.x開始的藍(lán)牙我們稱之為低功耗藍(lán)牙也就是藍(lán)牙ble,當(dāng)然4.x版本的藍(lán)牙也是向下兼容的。android手機必須系統(tǒng)版本4.3及以上才支持BLE API。低功耗藍(lán)牙較傳統(tǒng)藍(lán)牙,傳輸速度更快,覆蓋范圍更廣,安全性更高,延遲更短,耗電極低等等優(yōu)點。(現(xiàn)在的穿戴設(shè)備都是使用BLE藍(lán)牙技術(shù)的)

傳統(tǒng)藍(lán)牙與低功耗藍(lán)牙通信方式也有所不同,傳統(tǒng)的一般通過socket方式,而低功耗藍(lán)牙是通過Gatt協(xié)議來實現(xiàn)。

本文章目的便是介紹BLE 4.0的使用以及相關(guān)問題的解決,本文采用簡要模式介紹BLE4.0的核心類的使用以及藍(lán)牙開發(fā)的簡介,如需了解藍(lán)牙知識的詳細(xì)知識點,百度可搜索其他大神的文章進行學(xué)習(xí),下文通用BLE代為藍(lán)牙4.0。

BLE的兩種模式分為CBCentralMannager 中心模式 和CBPeripheralManager 外設(shè)模式,在這里主要和大家分享 CBCentralMannager 中心模式的開發(fā)和使用。

說明:Service,Characteristic是每個硬件設(shè)備出廠設(shè)定的設(shè)備服務(wù)和特征值,用UUID作為唯一標(biāo)識符。UUID為這種格式:0000ffe1-0000-1000-8000-00805f9b34fb。比如有3個Service,那么就有三個不同的UUID與Service對應(yīng)。這些UUID都寫在硬件里,我們通過BLE提供的API可以讀取到,一個BLE終端可以包含多個Service, 一個Service可以包含多個Characteristic,一個Characteristic包含一個value和多個Descriptor,一個Descriptor包含一個Value。Characteristic是比較重要的,是手機與BLE終端交換數(shù)據(jù)的關(guān)鍵,讀取設(shè)置數(shù)據(jù)等操作都是操作Characteristic的相關(guān)屬性。說白了,我們可以把每個服務(wù)特征值看成是我們網(wǎng)絡(luò)請求的api接口,我們和藍(lán)牙的交互,是要連接到對應(yīng)的service和對應(yīng)的Characteristic才可以正確讀取到和硬件文檔以及出廠定制好的服務(wù)和數(shù)據(jù)。

1、導(dǎo)入:#import CoreBluetooth/CoreBluetooth.h

2、遵守CBCentralManagerDelegate,CBPeripheralDelegate協(xié)議

3、初始化中心Manager,創(chuàng)建中心角色

4、檢查當(dāng)前設(shè)備中心的藍(lán)牙狀態(tài)

5、開始掃描

6、發(fā)現(xiàn)外設(shè)

7、連接外設(shè)

? ? ? 連接狀態(tài)

8、掃描外設(shè)服務(wù)Service

9、掃描service特征值

10、給特征值寫數(shù)據(jù)(就是發(fā)送指令)

11、訂閱特征值通知(訂閱后可收到回應(yīng)的數(shù)據(jù))

12、根據(jù)特征值讀取數(shù)據(jù)(注:應(yīng)把之前發(fā)送數(shù)據(jù)和訂閱通知的peripheral和characteristic定義為全局屬性)

*該處即為接收到外設(shè)發(fā)送的數(shù)據(jù)的方法

到這里,整個藍(lán)牙使用的核心流程就基本介紹完了,鑒于寫博客文章太累,太耗時,我決定先睡覺去,回頭把文章慢慢細(xì)化一下,查漏補缺,格式可能也不是很完美,請讀者們見諒,多提寶貴意見,喜歡的老鐵們,可以點下喜歡或者收藏!

本人github地址: shLuckySeven

歡迎去點star

iOS藍(lán)牙開發(fā)相關(guān)知識點和注意事項

總結(jié)一下藍(lán)牙開發(fā)相關(guān)的知識點和注意事項,做個筆記,也希望你們能少踩坑

(公司部分藍(lán)牙項目為混編項目,藍(lán)牙相關(guān)處理均采用了Objective-C,故本文??均采用OC,Swift處理相同)

藍(lán)牙4.0包含兩個藍(lán)牙標(biāo)準(zhǔn),它是一個是 雙模 的標(biāo)準(zhǔn),它包含 傳統(tǒng)藍(lán)牙部分(也稱經(jīng)典藍(lán)牙) 和 低功耗藍(lán)牙部分(BLE) , 二者適用于不同的應(yīng)用場景和應(yīng)用條件。他們的特點如下

所以藍(lán)牙4.0是集成了傳統(tǒng)藍(lán)牙和低功耗藍(lán)牙兩個標(biāo)準(zhǔn)的,并不只是低功耗藍(lán)牙

藍(lán)牙4.0支持兩種部署方式: 雙模式 和 單模式 ,雙模同時支持經(jīng)典藍(lán)牙和低功耗藍(lán)牙,而單模則只支持其中一種。

二者更多細(xì)節(jié)詳見: 傳統(tǒng)藍(lán)牙和低功耗藍(lán)牙的區(qū)別

iOS中藍(lán)牙相關(guān)功能都封裝進了 CoreBluetooth 類中,其中有幾個常見的參數(shù)和概念

具體API參考 CoreBluetooth藍(lán)牙開發(fā)

保存到數(shù)組中的設(shè)備可通過 UUID 來進行區(qū)分。從 iOS7之后蘋果不提供外設(shè)的mac地址,外設(shè)的唯一標(biāo)識換成了由mac封裝加密后的UUID,需要注意的是不同的手機獲取同一個外設(shè)的UUID是不同的,所以在不同手機之間UUID不是唯一的,但在本機上可以作為唯一標(biāo)識(特殊情況手機刷機后也會改變UUID)。

如何獲取Mac地址

一般使用場景是根據(jù)Mac地址區(qū)分某個外設(shè)

注意點:

寫入數(shù)據(jù)時可能會遇到需要分包發(fā)送的情況,我們可以通過下面的API或許當(dāng)前特征支持的最大的單條寫入長度

maxLength 一般取決于藍(lán)牙模塊內(nèi)部接收 緩沖區(qū) 的大小,很多硬件設(shè)備這個緩沖區(qū)的大小是 20 字節(jié), 這個大小也和特征的寫入權(quán)限有關(guān),像具有寫入權(quán)限 withResponse 類的特征其大小一般為 512 字節(jié),當(dāng)然這些都是取決于設(shè)備測的設(shè)置;

當(dāng)我們單次發(fā)送的數(shù)據(jù)字節(jié)長度大于 maxLength 時,我們就需要采用分包的方式來發(fā)送數(shù)據(jù)了,

分包發(fā)送的邏輯類似于下面

這邊延時主要是設(shè)備側(cè)的接收模塊接收數(shù)據(jù)以及處理能力有限

外圍設(shè)備測和中心設(shè)備(大部分情況下是手機)保持藍(lán)牙連接的狀態(tài)下,如果長時間不產(chǎn)生交互,藍(lán)牙就會斷開,所以為了保持兩者持續(xù)的連接狀態(tài),需要做?;钐幚恚簿褪切枰掷m(xù)的發(fā)送心跳包(watchdog)。相應(yīng)的處理是使用一個定時器定時向設(shè)備側(cè)發(fā)送符合設(shè)備協(xié)議格式的心跳包。

斷開連接很簡單,只需要調(diào)用 [self.centralManager cancelPeripheralConnection:peripheral] 傳入需要斷開連接的設(shè)備對象就行了。斷開連接時會自動調(diào)用 centralManager:didDisconnectPeripheral:error: 代理方法。

按照之前的慣例,當(dāng)error為nil時表示斷開成功,error不為nil時斷開失敗。這種理解是錯誤的。

當(dāng)你調(diào)用 cancelPeripheralConnection: 方法(主動斷開)斷開連接時error為nil ; 沒有調(diào)用這個方法(異常斷開)而斷開時error返回的是異常斷開的原因。也可以理解為主動調(diào)用斷開連接方法一定會斷開

接下來就是斷開重連的問題了,對藍(lán)牙功能進行封裝時肯定少不了斷開重連。首先斷開時可通過上面的代理方法的error是否為nil判斷是否是異常斷開,一般情況下異常斷開時是需要重連的

原因就是當(dāng)設(shè)備斷開連接后 peripheral.services 為nil了,當(dāng)然 service.characteristics 也是nil,所以需要在斷開連接時把保存這個設(shè)備對應(yīng)的服務(wù)和特征全部清除,然后在連接成功時重新過一遍發(fā)現(xiàn)服務(wù)和發(fā)現(xiàn)特征的流程就好了。

iOS7 開始,Apple加入了Beacon圍欄檢測的API, ( iBeacon-維基百科 ), 其工作方式是,配備有低功耗藍(lán)牙(BLE)通信功能的設(shè)備使用 BLE 技術(shù)向周圍發(fā)送自己特有的 ID,接收到該 ID 的應(yīng)用軟件會根據(jù)該 ID 采取一些行動。比如,在店鋪里設(shè)置 iBeacon 通信模塊的話,便可讓 iPhone 和 iPad 上運行一資訊告知服務(wù)器,或者由服務(wù)器向顧客發(fā)送折扣券及進店積分, 或者公司的手機打卡,只要手機靠近打卡器一定范圍,手機測就向打開器發(fā)送打卡信息,從而自動打卡。這種場景還有很多。 其中一個最重要的功能就是App的喚醒功能(殺死后也能喚醒)

舉一個我們的例子,我們的產(chǎn)品業(yè)務(wù)場景就是在進入車輛以后,需要使用藍(lán)牙連接我們的后裝車載設(shè)備以采集車輛信息和駕駛行為行程等,這里有一個問題就是在App被殺死的情況下如何喚醒App, 因為不可能要求用戶每次都主動去打開App,這樣體驗太差。我們的做法是通過iBeacon,當(dāng)我們的車輛點火以后,設(shè)備測通電,發(fā)出 iBeacon廣播 ,App實現(xiàn)監(jiān)聽iBeacon相關(guān)功能后就可以喚醒我們App,然后在相應(yīng)的回調(diào)的處理一些事情,比如通過藍(lán)牙連接設(shè)備。這里的前提條件是我們的硬件設(shè)備測包含iBeacon模塊,具有iBeacon功能,而且對iBeacon的廣播頻率也有一定的要求,長了可能喚醒的功能會不穩(wěn)定,官方建議的好像是100ms,頻率超高越耗電,但可以讓手機或其它監(jiān)聽設(shè)備越快地發(fā)現(xiàn)iBeacon。標(biāo)準(zhǔn)的BLE廣播距離是100m,這使Beacon在室內(nèi)位置跟蹤場景下的效果更理想。

關(guān)于iBeacon更多的使用及介紹請參考

蘋果核 - iOS端近場圍欄檢測(一) ——iBeacon

iBeacon技術(shù)初探

ios藍(lán)牙app開發(fā)教程的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于iOS連接藍(lán)牙、ios藍(lán)牙app開發(fā)教程的信息別忘了在本站進行查找喔。

掃碼二維碼