iOS从BLE设备读取数据

l2osamch  于 2022-12-01  发布在  iOS
关注(0)|答案(2)|浏览(180)

我尝试从BLE设备读取数据,但不断获得权限错误。演示项目可以在这里找到:https://github.com/sergiomtzlosa/CoreBluetooth-Demo(请记住-我的代码和这个有点不同)。
连接和读取值一般没有问题,但有一些特征(这是必不可少的)给出了许可错误。
控制台日志:* 更新错误!!!特性:“Unknown(< fff4 >)”出现错误:“不允许读取”。*
因此,当我订阅或读取该特性的数据时,它每次都向我发送NULL(可能的原因:没有读取许可)。
控制台日志:* 特点:“未知(< fff4 >)”-〉值为:(空值)*
下面是一个代码段:

//Action on discovering services
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{

if (error) 
{
    NSLog(@"Discovered services for %@ with error: %@", peripheral.name, [error localizedDescription]);
    return;
}
for (CBService *service in peripheral.services) {

    NSLog(@"Discovereddddddddddd service %@", service.UUID);
    [testPeripheral discoverCharacteristics:nil  forService:service];
}
 NSLog(@"didDiscoverServicesEnd");
}

//Action on discovered characteristics
- (void)peripheral:(CBPeripheral *)peripheral
didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
NSLog(@"didDiscoverCharacteristicsForService!");
for (CBCharacteristic *characteristic in service.characteristics) {
    NSLog(@"Discovered characteristic %@", characteristic.UUID);
    NSLog(@"---------------------------------------------------");
    NSLog(@"Reading value for characteristic %@", characteristic.UUID);
    [peripheral readValueForCharacteristic:characteristic];
    NSLog(@"+++++++++++++++++++++++++++++++++++++++++++++++++++");
    [peripheral setNotifyValue:YES forCharacteristic:characteristic];
    }
}

//Action on reading value
- (void)peripheral:(CBPeripheral *)peripheral 
didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if (error){
    NSLog(@"Update error!!! Characteristic: %@ with error: %@", characteristic.UUID, [error localizedDescription]);
    return;
}else{
    NSData *data = characteristic.value;
    NSString *str = [NSString stringWithUTF8String:[data bytes]];
    NSLog(@"Characteristic: %@ -> with value: %@", characteristic.UUID, str);
}
}

怎么了?有办法克服这个问题吗?

h7appiyu

h7appiyu1#

外围设备是嵌入式设备还是其他iOS设备。我已经看到了,外围设备的特性必须明确配置为具有读取权限。仅仅因为你发现了一个特性并不意味着你可以读取它。

c9qzyr3d

c9qzyr3d2#

必须检查是否具有访问该值的权限,该权限在初始化CBCharacteristic时设置
“特征值权限表示特征值的读取、写入和加密权限的值。

typedef enum {
   CBAttributePermissionsReadable = 0x01,
   CBAttributePermissionsWriteable = 0x02,
   CBAttributePermissionsReadEncryptionRequired = 0x04,
   CBAttributePermissionsWriteEncryptionRequired = 0x08,
} CBAttributePermissions;"

https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBMutableCharacteristic_Class/Reference/CBMutableCharacteristic.html

相关问题