讀寫數據需要考慮具體的使用場景,比如Data,Byte,bit的轉換,數據字節序的大小端,數據是否分包。以及對于外設的某些信息的判斷:比如說,你要交互的特征,它的properties的值是0x10,表示你只能用訂閱的方式來接收數據:
如果properties的值是0x10,在
didDiscoverCharacteristicsForService里寫 [peripheral setNotifyValue:YES forCharacteristic:characteristic];
//如果需要更新Characteristic的值
`if (needReadValueForCharacteristic) {
for (CBCharacteristic *characteristic in service.characteristics) {
// [peripheral readValueForCharacteristic:characteristic];
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
//判斷讀寫權限
// if (characteristic.properties & CBCharacteristicPropertyRead ) {
// [peripheral readValueForCharacteristic:characteristic];
// }
}
}`
重連外設(Retrieve)
當外設已處于連接狀態,或者與手機配對的狀態下,是無法直接通過掃描發現外設的,CoreBluetooth提供了重連恢復的API,它有兩種方式,返回值都是外設Peripheral數組:
1.retrievePeripheralsWithIdentifiers,參數是設備的UUID
2.retrieveConnectedPeripheralsWithServices,參數是特定服務的UUID
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:uuidString1]; [uuidArray addObject:(id)uuid]; if(uuidArray.count != 0) { NSArray * arr = [_bleCentralManager retrievePeripheralsWithIdentifiers:uuidArray]; }