2016-09-02 9 views
1

Von meinem mobilen Gerät (Scanner) versuche ich auf einen Deskriptor in einem angeschlossenen Wearable (Broadcaster) zu schreiben.Android BLE: Deskriptor/Merkmal schreiben schlägt fehl mit GATT_WRITE_NOT_PERMITTED

auf dem tragbaren, ich den Descriptor als

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

auf dem mobilen definiert haben, versuche ich leider mit

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

der Charakteristik zu schreiben, scheitert dies mit dem Status GATT_WRITE_NOT_PERMITTED in

@Override 
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { 

} 

Im tragbaren Logcat sehe ich gatts_write_attr_perm_check - GATT_WRITE_NOT_PERMIT.

Das gleiche passiert, wenn ich versuche, auf ein Merkmal zu schreiben.

Was ist seltsam ist, dass der Schreibvorgang erfolgreich ist, wenn Sie einen iOS-Scanner verwenden. Dies bedeutet, dass der tragbare Teil korrekt ist.

Ich habe die Berechtigungen in dem Manifest:

<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" /> 

Geräte verwendet: Nexus 5-fach 6.0.1 API 23, Moto 360 5.1.1 API 22

jemand eine Idee Hat, wie man Fix dieses Deskriptor/Merkmal Schreibproblem?

Antwort

1

Von meinem Mobilgerät (Scanner) Ich versuche, in ein angeschlossenen tragbaren (Sender) auf einen Deskriptor zu schreiben.

In diesem Fall sollte es mobile Gerät (zentral) und angeschlossen tragbar (Peripherie) sein. Scanner und Broadcaster stellen tatsächlich keine BLE-Verbindung her.

In Bezug auf den Schreibfehler wurde es bei der Funktion gatts_write_attr_perm_check abgelehnt, wenn Anwendung versucht, Daten in die Datenbank zu schreiben. der Code nur unter wie:

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

So ist das Problem, das aufgezeichnete zul mit GATT_WRITE_ALLOWED nicht berechtigt war, die so

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

ist, könnten Sie einen folgenden Versuch haben: 1) unpair die Gerät und koppeln Sie das Gerät erneut. 2) Aktivieren der hohen Sicherheitsstufe z.B. Aktivieren Sie das MITM.

Und ich nehme an, Sie möchten die Benachrichtigung richtig? Ich konnte nicht den ganzen Code, den Sie haben zu bekommen, aber können Sie auch diese (Zitat von Android-Website) versuchen:

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

Danke, habe ich versucht, mit PERMISSION_WRITE_SIGNED_MITM auf dem Beschreiber, aber jetzt, wenn sie versuchen, um es zu schreiben, ich Status 1 auf onDescriptorWrite. Ich denke, es ist GATT_FAILURE = 0x101? Hast du noch andere Ideen, was helfen könnte? –

+0

Entschuldigung ist ihr irgendein Protokoll? –

+0

Ich habe auch den Beitrag bearbeitet; Wenn Sie versuchen, die Benachrichtigung zu aktivieren, folgen Sie einfach dem Beispiel. –

Verwandte Themen