2016-09-02 2 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 실패
@Override 
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { 

} 

착용 가능한 logcat에서 gatts_write_attr_perm_check - GATT_WRITE_NOT_PERMIT.

특성에 쓰려고 할 때도 똑같은 일이 발생합니다.

이상한 점은 iOS 스캐너를 사용할 때 쓰기가 성공한다는 것입니다. 이는 웨어러블 부품이 올바른 것을 의미합니다. 사용

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

장치 :

나는 매니페스트의 권한이 넥서스 5 배 6.0.1 API 23 모토를 360 5.1.1 사람이 어떻게 생각을 가지고 있습니까 (22)

API 이 디스크립터/특성 쓰기 문제를 수정 하시겠습니까?

답변

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을 활성화하십시오.

그리고 알림을 사용 하시겠습니까? 나는 당신이 모든 코드를 가져올 수 없습니다하지만 당신은이 (안드로이드 웹 사이트에서 인용)을 시도 할 수 있습니다 :

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

나는 또한 포스트를 편집했다. 알림을 사용하려면 샘플을 따르십시오. –

관련 문제