質問: characteristic2.getDescriptor(UUID.fromString(DESCRIPTOR_UUID)); descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE); // 設定した descriptor を書き込む mBluetoothGatt.writeDescriptor(descriptor); ```
回答: メッセージに書かれた `setNotifyValue:forCharacteristic:` を呼べば、Characteristic 上の宣言に基づいて Notification と Indication のどちらか適切な方を許可するよう設定されます。 技術的にはNotificationとIndicationの主な違いは応答を返すかどうかなので、iOSにせよAndroidにせよこの違いはライブラリ側で吸収されています。その上で、Androidは手動で当該Descriptorを変更することができますが、iOSは `setNotifyValue:forCharacteristic:` を使うよう強制している、という話です。 なおAndroidでも同じようにNotification/Indicationのどちらかを許可するメソッド、 `setCharacteristicNotification(BluetoothGattCharacteristic, boolean)`) があるようです。 参考 * - setNotifyValue:forCharacteristic: - CBPeripheral Class Reference * 【連載】Bluetooth LE (2) iOS デバイスで Bluetooth LE 機器を使う (フェンリル | デベロッパーズブログ) * Handling indications instead of notifications in Android BLE - Stack Overflow