El uso y la atención de iOS Bluetooth

¡Acostúmbrate a escribir juntos! Este es el primer día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

Recientemente, he usado bluetooth de baja potencia en el proyecto, por lo que escribiré sobre el uso de bluetooth y los problemas encontrados en su uso. Si hay algún problema en el texto, puede corregirme.

Generalmente, el proceso principal de uso de Bluetooth suele ser el siguiente:

  • Iniciar un objeto de administración central
  • Descubra y conéctese a los dispositivos anunciados
  • Escanee los datos después de conectar el dispositivo.
  • Enviar solicitudes de lectura y escritura para las características de los servicios del dispositivo
  • La suscripción admite la función de notificación (se informa activamente cuando se actualizan los datos).

Las propiedades y métodos que comúnmente usamos son los siguientes:

CBCentralManager

El objeto CBCentralManager, el llamado objeto de gestión central, es el símbolo orientado a objetos CoreBluetooth del dispositivo central local. El estado del objeto CBCentralManager actual se puede obtener a través de CBManagerState. como se muestra en el siguiente código

public enum CBManagerState : Int {
    case unknown = 0    //未知
    case resetting = 1  //复位
    case unsupported = 2 //该设备不支持蓝牙
    case unauthorized = 3//该设备无权限使用蓝牙
    case poweredOff = 4  //蓝牙关闭
    case poweredOn = 5   //蓝牙打开
}
复制代码

inicialización

Hay dos métodos de inicialización para CBCentralManager

public convenience init(delegate: CBCentralManagerDelegate?, queue: DispatchQueue?)

@available(iOS 7.0, )
public init(delegate: CBCentralManagerDelegate?, queue: DispatchQueue?, options: [String : Any]? = nil)
复制代码

delegado: configure la
cola de proxy: indique en qué cola procesar el evento. Cuando es nulo, significa que el subproceso principal procesará
opciones: este diccionario tiene dos claves oficiales
CBCentralManagerOptionShowPowerAlertKey: aparecerá un cuadro de advertencia cuando el interruptor de Bluetooth esté no activado
CBCentralManagerOptionRestoreIdentifierKey: el sistema utiliza este UID para identificar un
CentralManager específico. Por lo tanto, para continuar con la ejecución de la aplicación, el UID debe permanecer sin cambios para que CentralManager se recupere correctamente.

Hay muchos métodos de proxy de CBCentralManagerDelegate y CBPeripheralDelegate comúnmente utilizados. Solo algunos de ellos se enumeran a continuación.

La actualización del estado de la conexión, puede usar este método proxy para saber si el dispositivo Bluetooth actual está disponible

func centralManagerDidUpdateState(_ central: CBCentralManager)
复制代码

Escanea para descubrir dispositivos

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String: Any], rssi RSSI: NSNumber)
复制代码

Nota⚠️: Al escanear y descubrir dispositivos, el lado de iOS no puede obtener directamente la dirección de Bluetooth Mac como Android. La dirección de Bluetooth Mac del lado de iOS se almacena en los datos de publicidad y debe convertirse más, que se puede convertir mediante los siguientes métodos

let _tempData = advertisementData["kCBAdvDataManufacturerData"]

let macAddress = "\(String(describing: _tempData))".substring(from: "<").substring(to: ">").replacingOccurrences(of: " ", with: "").uppercased().reversed(preserveFormat: false).substring(to: 12).reversed(preserveFormat: false)
复制代码

El dispositivo Bluetooth está conectado

func centralManager( _ central: CBCentralManager, didConnect peripheral: CBPeripheral)
复制代码

La conexión con el dispositivo Bluetooth falla. Puede imprimir el mensaje de error para solucionar la causa de la falla.

func centralManager( _ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?)
复制代码

El dispositivo Bluetooth ha sido desconectado

func centralManager( _ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?)
复制代码

El comando se envía usando el func writeValue( _ data: Data, for characteristic: CBCharacteristic, type: CBCharacteristicWriteType)método bajo CBPeripheral. CBCharacteristicWriteType tiene dos valores, withResponse y withoutResponse. Algunos estudiantes envían comandos a Bluetooth, pero el dispositivo Bluetooth no responde. Este valor es incorrecto. Los estudiantes que no saben qué valor usar, Puedes consultar con tus compañeros de clase.

La lectura y el análisis de datos de Bluetooth no se desarrollarán aquí, en el análisis final, es solo el análisis de paquetes de datos y la lectura de campos definidos.

Supongo que te gusta

Origin juejin.im/post/7081641447702659085
Recomendado
Clasificación