2016-09-02 62 views
1

モバイルデバイス(スキャナ)から、接続可能なウェアラブル(ブロードキャスタ)のディスクリプタに書き込もうとしています。ウェアラブル上Android BLE:GATT_WRITE_NOT_PERMITTEDでディスクリプタ/特性書き込みが失敗する

、私は携帯電話で

readCharacteristic = new BluetoothGattCharacteristic(Constants.READ_CHAR_UUID, 
          BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_NOTIFY, 
          BluetoothGattCharacteristic.PERMISSION_READ); 
readCharacteristic.addDescriptor(new BluetoothGattDescriptor(Constants.NOTIFY_DESC_UUID, 
         BluetoothGattDescriptor.PERMISSION_READ | BluetoothGattDescriptor.PERMISSION_WRITE)); 

として記述子を定義している、私は

BluetoothGattDescriptor descriptor = readCharacteristic.getDescriptor(Constants.NOTIFY_DESC_UUID); 
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE) 

と特性に書き込みをしてみてください残念ながら、これは

に状況GATT_WRITE_NOT_PERMITTEDで失敗

ウェアラブルlogcatでは、gatts_write_attr_perm_checkを参照してください - GATT_WRITE_NOT_PERMIT。

特性に書き込むときも同じことが起こります。

奇妙なことは、iOSスキャナを使用すると書き込みが成功するということです。これは、ウェアラブル部品が正しいことを意味します。

私はマニフェストの権限があります。誰がどのようにアイデアを持っています ネクサス5倍の6.0.1 API 23、 モト360 5.1.1 API 22

<uses-permission android:name="android.permission.BLUETOOTH" /> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.VIBRATE"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

使用するデバイスをこのディスクリプタ/特性書込み問題を修正しますか?

答えて

1

私のモバイルデバイス(スキャナ)から、接続可能なウェアラブル(ブロードキャスター) のディスクリプタに書き込もうとしています。

この場合、モバイルデバイス(中央)と接続可能なウェアラブル(周辺機器)である必要があります。スキャナとブロードキャスタは実際にBLE接続を確立しません。

書き込みに失敗した場合、アプリケーションがデータをデータベースに書き込もうとすると、関数gatts_write_attr_perm_checkで拒否されました。ちょうど下のようなコードは: 1)登録解除:

else if (!(perm & GATT_WRITE_ALLOWED)) 
     { 
      status = GATT_WRITE_NOT_PERMIT; 
      GATT_TRACE_ERROR("gatts_write_attr_perm_check -GATT_WRITE_NOT_PERMIT"); 
     } 

ので、問題は、次の試してみることができ、記録パーマだから

> (GATT_PERM_WRITE | GATT_PERM_WRITE_ENCRYPTED |\ 
> GATT_PERM_WRITE_ENC_MITM | GATT_PERM_WRITE_SIGNED |\ 
> GATT_PERM_WRITE_SIGNED_MITM) 

あるGATT_WRITE_ALLOWED、と資格がなかったですもう一度ペアリングしてください。 2)高いセキュリティレベルを有効にします。 MITMを有効にします。

通知を有効にしたいと思いますか?私はあなたが持っているすべてのコードを取得できませんでしたが、あなたも、この(Androidのウェブサイトからの引用)を試すことができます。

private BluetoothGatt mBluetoothGatt; 
BluetoothGattCharacteristic characteristic; 
boolean enabled; 
... 
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); 
... 
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
     UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG)); 
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 
mBluetoothGatt.writeDescriptor(descriptor); 
+0

おかげで、私は、ディスクリプタにPERMISSION_WRITE_SIGNED_MITMにしようとしたが、それへの書き込みしようとすると、今、私は上のステータス1を取得しますonDescriptorWrite。私はそのGATT_FAILURE = 0x101だと思いますか?助けてくれる何か他のアイデアはありますか? –

+0

残念ながらログはありますか? –

+0

私も投稿を編集しました。通知を有効にしようとしている場合は、サンプルに従ってください。 –

関連する問題