🙄
SwiftでBluetoothデバイスを管理する方法
はじめに
この記事では、Swiftを使用してiOSデバイスからBluetoothデバイスを検出し、接続する方法を詳しく説明します。Core Bluetoothフレームワークを利用して、Bluetoothデバイスとの通信を管理するクラスBluetoothManager
の実装例を紹介します。
BluetoothManagerクラスの概要
BluetoothManager
クラスは、CBCentralManagerDelegate
とCBPeripheralDelegate
プロトコルを採用して、Bluetoothデバイスの検出から接続までの一連のプロセスを管理します。主な機能は以下の通りです。
- Bluetoothの状態の監視
- デバイスのスキャン
- デバイスの発見と接続
- サービスと特性の探索
Info.plistの設定
Bluetoothを使用するiOSアプリケーションでは、Info.plistにいくつかの設定を追加する必要があります。これはアプリがユーザーのデバイスのBluetooth機能にアクセスするための許可を得るために必須です。
<key>NSBluetoothAlwaysUsage Description</key>
<string>このアプリはあなたのBluetoothデバイスに接続して音楽を再生するためにBluetoothを使用します。</string>
初期化と状態の監視
クラスはCBCentralManager
のインスタンスを生成し、Bluetoothの状態が更新されたときにスキャンを開始します。
override init() {
super.init()
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
scanForDevices()
} else {
print("Bluetooth is not available.")
}
}
デバイスのスキャンと発見
Bluetoothが有効になると、デバイスのスキャンが開始されます。デバイスを発見すると、コンソールにデバイス名とRSSI値が表示されます。
func scanForDevices() {
centralManager.scanForPeripherals(withServices: nil, options: nil)
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("Discovered \(peripheral.name ?? "unknown device") at \(RSSI)")
onDeviceDiscovered?(peripheral)
}
デバイスへの接続
特定のデバイス(例えば "WH-1000XM5")を発見した場合、スキャンを停止してそのデバイスに接続を試みます。
if let name = peripheral.name, name.contains("WH-1000XM5") {
centralManager.stopScan()
peripheralToConnect = peripheral
centralManager.connect(peripheral, options: nil)
}
まとめ
このクラスを利用することで、Swiftアプリケーション内でBluetoothデバイスのスキャン、接続、およびサービスの探索を簡単に実装できます。
サンプルコードを下記に載せましたので参考にしてください
Discussion