

iOSにおいて、「Characteristic Configuration
Descriptor」に「2(0x02)」を書き込みIndicateを許可する方法について教えていただけないでしょうか。

CBPeripheralクラスの

[code]

    - (void)writeValue:(NSData )data forDescriptor:(CBDescriptor )descriptor;
    
[/code]

を利用したところ、  
「setNotifyValue:forCharacteristic: を使うべきです。」

とのエラーが発生しました。

なお、Androidでは以下のコードで実現済みです。  
これと同じことをiOSで実現したいと考えております。

[code]

    BluetoothGattService s = 
      mBluetoothGatt.getService(UUID.fromString(サービスUUID));
    
    BluetoothGattCharacteristic characteristic2 = 
      s.getCharacteristic(UUID.fromString(characteristicのUUID));
    
    int charaProp = characteristic2.getProperties();
                       mBluetoothGatt.setCharacteristicNotification(characteristic2, true);
    
    // Sensor の notification 機能を有効化する
    BluetoothGattDescriptor descriptor = 
    　characteristic2.getDescriptor(UUID.fromString(DESCRIPTOR_UUID));
                        descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
    
    // 設定した descriptor を書き込む
    mBluetoothGatt.writeDescriptor(descriptor);
    
[/code]


CC BY-SA 3.0
2016-04-14T11:05:20.507
24012
2016-04-15T05:35:05.650
2016-04-15T04:53:16.240
8000
15160
question
ios objective-c bluetooth
Bluetooth LE Client Characteristic Configuration Descriptorの書き込み方法について


メッセージに書かれた
[`setNotifyValue:forCharacteristic:`](https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBPeripheral_Class/index.html#//apple_ref/occ/instm/CBPeripheral/setNotifyValue:forCharacteristic:)
を呼べば、Characteristic 上の宣言に基づいて Notification と Indication
のどちらか適切な方を許可するよう設定されます。

技術的にはNotificationとIndicationの主な違いは応答を返すかどうかなので、iOSにせよAndroidにせよこの違いはライブラリ側で吸収されています。その上で、Androidは手動で当該Descriptorを変更することができますが、iOSは
`setNotifyValue:forCharacteristic:` を使うよう強制している、という話です。

なおAndroidでも同じようにNotification/Indicationのどちらかを許可するメソッド、
[`setCharacteristicNotification(BluetoothGattCharacteristic,
boolean)`](http://developer.android.com/reference/android/bluetooth/BluetoothGatt.html#setCharacteristicNotification\(android.bluetooth.BluetoothGattCharacteristic,%20boolean\))
があるようです。

参考

  * [\- setNotifyValue:forCharacteristic: - CBPeripheral Class Reference](https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBPeripheral_Class/index.html#//apple_ref/occ/instm/CBPeripheral/writeValue:forDescriptor:)
  * [【連載】Bluetooth LE (2) iOS デバイスで Bluetooth LE 機器を使う (フェンリル | デベロッパーズブログ)](http://blog.fenrir-inc.com/jp/2013/10/bluetooth-le-ios-1.html)
  * [Handling indications instead of notifications in Android BLE - Stack Overflow](https://stackoverflow.com/questions/31030718/handling-indications-instead-of-notifications-in-android-ble)


CC BY-SA 3.0
2016-04-15T05:26:36.307
24036
2016-04-15T05:35:05.650
2017-05-23T12:38:55.307
-1
8000
24012
answer