我正在编写一个Android BLE应用程序,我正在尝试获取某个特性的权限。我已经设法使用characteristic.getProperties()获取特性属性,并返回非零值,但是,当我使用getPermission()方法时,它返回0,即使我确定该特性具有PERMISSION_WRITE_ENCRYPTED_MITM(0x00000040) )。
以下是代码段
// properties
int properties = ch.getProperties();
DebugWrapper.infoMsg("properties: " + properties, TAG); //returns non-zero value
// permissions
int permissions = ch.getPermissions();
DebugWrapper.infoMsg("permissions: " + permissions, TAG); //returns zero value
我做错了吗?是否有特定的方法来获取特性的权限,或者这是android api的问题?
我正在使用API 19并在Samsung Galaxy Note 3上测试我的程序。
我感谢任何帮助。
答案 0 :(得分:8)
这看起来像底层框架的问题。 This link显示了框架在发现远程设备上的服务/特征时执行的代码块。您可以看到创建新BluetoothGattCharacteristic
的时间,权限参数始终以0
传递。
此外,即使稍后读取特征,也只更新特征值,不会在对象上重置其他参数。
相反,Android似乎试图在trial and error的基础上处理身份验证/权限问题。换句话说,框架总是尝试基本的读/写,如果由于认证原因而失败,它会自动再次尝试请求MITM认证。