iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Mobile Development

Swift大航道-啟航篇系列 第 26

swift 藍芽-掃描與連接

  • 分享至 

  • xImage
  •  

藍芽

前置動作

請幫我在專案的info建立一個key,如下,並把後面的值改成允許使用藍芽

Privacy - Bluetooth Always Usage Description

截圖 2024-09-27 下午2.10.01
再建立一個swift檔案

藍芽

首先要記得先載入藍芽,並創建一個class,如下

import CoreBluetooth

class BluetoothServices: NSObject {
    
    static let shared = BluetoothServices()
    var central: CBCentralManager?
    var peripheral: CBPeripheralManager?
    var connectedPeripheral: CBPeripheral?
    var rxtxCHaracteristic: CBCharacteristic?
    
    private var bluePeripherals: [CBPeripheral] = []
    
}
  • 這邊我是先創建一個單例 shared,這樣之後需要使用的話就可以直接BluetoothServices.shard
  • CBCentralManager:用於掃描和連接外部藍牙設備。
  • CBPeripheralManager:用於管理本地藍牙設備。
  • connectedPeripheral:當前連接的藍牙設備。
  • rxtxCHaracteristic:用於讀寫數據的特徵。
  • bluePeripherals : 為一個空陣列,之後讀取到的藍芽設備可以存放在裡面
    再來底下的程式一樣是放在BluetoothServices的class裡面
// 初始化:副線程
    private override init() {
        super.init()
        
        let queue = DispatchQueue.global()
        central = CBCentralManager(delegate: self, queue: queue)
    }
    
    // 掃描藍芽裝置
    func startScan() {
        central?.scanForPeripherals(withServices: nil, options: nil)
    }
    
    // 停止掃描
    func stopScan() {
        central?.stopScan()
    }
    
    // 連接藍芽週邊設備
    func connectPeripheral(peripheral: CBPeripheral) {
        self.connectedPeripheral = peripheral
        central?.connect(peripheral, options: nil)
    }
    
    // 中斷與藍芽周邊設備連接
    func disconnectPeripheral(peripheral: CBPeripheral) {
        central?.cancelPeripheralConnection(peripheral)
    }

這邊比較特別的是初始化副線程,因為初始化時,創建一個全局的 DispatchQueue,並將其傳遞給 CBCentralManager。這表示藍牙操作將在後台線程中執行,避免阻塞主線程。

結論

今天跟大家分享的是藍芽的基本功能,包括掃描、連接和斷開連接...等等,明天我們繼續帶大家推進專案的進度


上一篇
git常見指令
下一篇
swift 回傳藍芽狀態
系列文
Swift大航道-啟航篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言