5

BLE デバイスからデータを読み込もうとしていますが、パーミッション エラーが発生し続けます。デモ プロジェクトは次の場所にあります: https://github.com/sergiomtzlosa/CoreBluetooth-Demo (覚えておいてください - 私のコードはこれとは少し異なります)。

一般的に接続と読み取り値に問題はありませんが、いくつかの特性(これは不可欠です)が許可エラーを引き起こします。

コンソール ログ:更新エラー!!! 特性: "不明 (< fff4 >)" エラー: "読み取りは許可されていません"。

そのため、その特性からデータを購読または読み取ると、毎回 NULL が送信されます (考えられる理由: 読み取り許可がない)。

コンソール ログ:特性: "不明 (< fff4 >)" -> 値: (null)

コード セグメントは次のとおりです。

//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);
}
}

どうしたの?とにかくこの問題を克服する方法はありますか?

4

2 に答える 2

0

周辺機器は組み込みデバイスですか、それとも別の iOS デバイスですか。周辺機器の特性を明示的に構成して、読み取り許可を持たせる必要がある場所を見てきました。特性を発見したからといって、それを読めるとは限りません。

于 2013-12-19T23:32:54.750 に答える
0

値にアクセスする権限があるかどうかを確認する必要があります。CBCharacteristic を初期化すると権限が設定されます。

"Characteristic Value Permissions 特性の値に対する読み取り、書き込み、および暗号化のアクセス許可を表す値。

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

于 2014-08-02T07:05:34.030 に答える