[swift]CoreBluetooth(Service)

更新於 發佈於 閱讀時間約 9 分鐘

CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。

CBPeripheral:外部設備

CBCharacteristic:外部設備的特徵。


首先要在info.plist裡設定新增藍芽服務。然後做宣告,如下:

var centralManager: CBCentralManager = CBCentralManager.init(delegate: self, queue: .main)


判斷手機藍牙狀態:

// 判斷手機藍牙狀態
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .resetting:
print("resetting")
case .unsupported:
print("unsupported")
case .unauthorized:
print("unauthorized")
case .poweredOff:
print("poweredOff")
case .poweredOn:
print("poweredOn")
central.scanForPeripherals(withServices: [CBUUID.init(string: service_UUID)], options: nil)
default:
print("unknown")
}
}


發現符合要求的外設:

/** 發現符合要求的外設 */
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
self.peripheral = peripheral
// 根據外設名稱來過濾
// if (peripheral.name?.hasPrefix("WH"))! {
// central.connect(peripheral, options: nil)
// }
self.centralManager?.stopScan()
central.connect(peripheral, options: nil)
}


連接成功的回調:

/** 連接成功 */
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.delegate = self
peripheral.discoverServices([CBUUID.init(string: service_UUID)])
print("連接成功")
}


連接失敗的回調:

/** 連接失敗的回調 */
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
print("連接失敗")
}


斷開連接的回調:

/** 斷開連接 */
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
print("斷開連接")
// 重新連接
central.connect(peripheral, options: nil)
}


發現服務的回調:

/** 發現服務 */
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
for service: CBService in peripheral.services! {
print("外設中的服務有:\(service)")
}

//本例的外設中只有一個服務
let service = peripheral.services?.last

// 根據UUID尋找服務中的特徵
peripheral.discoverCharacteristics([CBUUID.init(string: characteristic_UUID)], for: service!)
}


發現特徵的回調:

/** 發現特徵 */
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
for characteristic: CBCharacteristic in service.characteristics! {
print("外設中的特徵有:\(characteristic)")
}
self.characteristic = service.characteristics?.last

// 讀取特徵裏的數據
peripheral.readValue(for: self.characteristic!)

// 訂閱
peripheral.setNotifyValue(true, for: self.characteristic!)
}


訂閱狀態的回調:

/** 訂閱狀態 */
func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) {
if let error = error {
print("訂閱失敗: \(error)")
return
}

if characteristic.isNotifying {
print("訂閱成功")
} else {
print("取消訂閱")
}
}


接收到數據的回調:

/** 接收到數據 */
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
let data = characteristic.value
print(String.init(data: data!, encoding: String.Encoding.utf8)!)
}


主動傳送:

//主動傳送
func didClickPost(_ sender: Any) {
self.peripheral?.writeValue(Data(), for: self.characteristic!, type: CBCharacteristicWriteType.withResponse)
}


寫入數據:

/** 寫入數據 */
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
print("寫入數據")
}


主動接收:

//主動接收
func didClickGet(_ sender: Any) {
self.peripheral?.readValue(for: self.characteristic!)
}



留言
avatar-img
留言分享你的想法!
avatar-img
小黑與程式的邂逅
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
2024/09/22
JSON-RPC是一種設計簡單、無狀態、輕量級的遠端程序呼叫(RPC)協議。
2024/09/22
JSON-RPC是一種設計簡單、無狀態、輕量級的遠端程序呼叫(RPC)協議。
2024/09/22
CryptoSwift提供多種標準的加密演算法,並支援字串與資料之間的轉換。
2024/09/22
CryptoSwift提供多種標準的加密演算法,並支援字串與資料之間的轉換。
2024/09/21
APIKit是一種輕量級且類型安全的網路抽象層,將請求與響應類型進行關聯。這篇文章介紹了APIKit的基本概念,包括Request和Session的功能,以及如何定義請求和返回結果的類型,幫助開發者更高效地處理HTTP/HTTPS請求。理解這些基本組件,將使您在建構網路請求時更加得心應手。
Thumbnail
2024/09/21
APIKit是一種輕量級且類型安全的網路抽象層,將請求與響應類型進行關聯。這篇文章介紹了APIKit的基本概念,包括Request和Session的功能,以及如何定義請求和返回結果的類型,幫助開發者更高效地處理HTTP/HTTPS請求。理解這些基本組件,將使您在建構網路請求時更加得心應手。
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
隨著科技的進步,無線通訊工具從 BB.Call 演進到智慧型手機,改變了我們的生活模式,也帶來莫大的方便。相對人際關係起了變化,過度依賴和使用手機是現代人的通病,造成人與人之間零互動。本文探討如何擺脫手機的控制,善用而不沉迷,以及現代人使用手機應有的禮儀。
Thumbnail
隨著科技的進步,無線通訊工具從 BB.Call 演進到智慧型手機,改變了我們的生活模式,也帶來莫大的方便。相對人際關係起了變化,過度依賴和使用手機是現代人的通病,造成人與人之間零互動。本文探討如何擺脫手機的控制,善用而不沉迷,以及現代人使用手機應有的禮儀。
Thumbnail
在決定更換電池時,相信許多人會有這樣的疑問:「蘋果手機換電池資料會不見嗎?」 答案是否定的。由於 iPhone 手機的記憶體是固定在設備中的, 因此更換電池也不會導致資料遺失。為了保障數據安全會建議客戶,維修前重要資料提前備份起來。 iPhone換電池防止資料洩漏、遺失 ●拔除SIM
Thumbnail
在決定更換電池時,相信許多人會有這樣的疑問:「蘋果手機換電池資料會不見嗎?」 答案是否定的。由於 iPhone 手機的記憶體是固定在設備中的, 因此更換電池也不會導致資料遺失。為了保障數據安全會建議客戶,維修前重要資料提前備份起來。 iPhone換電池防止資料洩漏、遺失 ●拔除SIM
Thumbnail
蘋果最近針對巧控鍵盤推出了韌體更新,主要是修復重要的藍牙連線漏洞。 攻擊者利用該漏洞,一旦獲得巧控鍵盤的實體存取權限,就能取得其藍牙配對金鑰,進而掌控所有與鍵盤連結的裝置。 蘋果公告,這次韌體更新版本號為2.0.6,適用於多款2021年之後推出的巧控鍵盤, 包括一般版、數位鍵盤版、Touch
Thumbnail
蘋果最近針對巧控鍵盤推出了韌體更新,主要是修復重要的藍牙連線漏洞。 攻擊者利用該漏洞,一旦獲得巧控鍵盤的實體存取權限,就能取得其藍牙配對金鑰,進而掌控所有與鍵盤連結的裝置。 蘋果公告,這次韌體更新版本號為2.0.6,適用於多款2021年之後推出的巧控鍵盤, 包括一般版、數位鍵盤版、Touch
Thumbnail
鯉魚是耳機使用愛好者,過去常常使用手機聽有聲書或音樂,原本都是用蘋果原廠的有線耳機(確實是好用),有一次朋友就送我它牌的無線藍芽耳機,我只能說:用過無線就回不去了~哈哈哈
Thumbnail
鯉魚是耳機使用愛好者,過去常常使用手機聽有聲書或音樂,原本都是用蘋果原廠的有線耳機(確實是好用),有一次朋友就送我它牌的無線藍芽耳機,我只能說:用過無線就回不去了~哈哈哈
Thumbnail
CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。 CBPeripheral:外部設備 CBCharacteristic:外部設備的特徵。 首先要在info.plist裡設定新增藍芽服務。然後做宣告,如下: var centralManager: CBCentralM
Thumbnail
CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。 CBPeripheral:外部設備 CBCharacteristic:外部設備的特徵。 首先要在info.plist裡設定新增藍芽服務。然後做宣告,如下: var centralManager: CBCentralM
Thumbnail
CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。 CBPeripheral:外部設備 CBCharacteristic:外部設備的特徵。 首先先宣告: var centralManager: CBCentralManager = CBCentralManager.ini
Thumbnail
CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。 CBPeripheral:外部設備 CBCharacteristic:外部設備的特徵。 首先先宣告: var centralManager: CBCentralManager = CBCentralManager.ini
Thumbnail
前陣子在某線上拍賣平台買了一支超便宜的有線超任USB搖桿,結果玩不到一個禮拜按鈕就被按壞了,而且發現還沒家裡那台老舊超級任天堂搖桿順手,所以就開始打起老舊超任搖桿的主意。。。。
Thumbnail
前陣子在某線上拍賣平台買了一支超便宜的有線超任USB搖桿,結果玩不到一個禮拜按鈕就被按壞了,而且發現還沒家裡那台老舊超級任天堂搖桿順手,所以就開始打起老舊超任搖桿的主意。。。。
Thumbnail
筆電或桌電)的win10 藍芽驅動程式消失或失能的問題,在控制台介面中裝置頁面的會發現藍芽原本應有的開關會消失 最快速解法: 其他類型
Thumbnail
筆電或桌電)的win10 藍芽驅動程式消失或失能的問題,在控制台介面中裝置頁面的會發現藍芽原本應有的開關會消失 最快速解法: 其他類型
Thumbnail
問題:HTC的手機連接上自拍棒的藍芽後,點選拍照卻是調整音量,而不是拍照
Thumbnail
問題:HTC的手機連接上自拍棒的藍芽後,點選拍照卻是調整音量,而不是拍照
Thumbnail
2020年,藍芽(或說藍牙)有新規範–《LE Audio》。當然,這與時代的社會背景有一定的藕合關係。LE就是”Low Energy”縮寫,低功耗、低耗電之意;這兩個英文字在藍芽領域,地位相當重要。  >> 細說藍芽《LE Audio》,無妨從產品的面向來切入。  甚麼東西當前最夯產品之一?也許是藍
Thumbnail
2020年,藍芽(或說藍牙)有新規範–《LE Audio》。當然,這與時代的社會背景有一定的藕合關係。LE就是”Low Energy”縮寫,低功耗、低耗電之意;這兩個英文字在藍芽領域,地位相當重要。  >> 細說藍芽《LE Audio》,無妨從產品的面向來切入。  甚麼東西當前最夯產品之一?也許是藍
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News