一尘不染

Android蓝牙低功耗:character.getPermissions()返回0?

java

我正在编写一个Android
BLE应用程序,并且试图获得某个特性的权限。我已经设法通过character.getProperties()获取特征属性,并且它返回非零值,但是,即使我确定特征具有PERMISSION_WRITE_ENCRYPTED_MITM(0x00000040,当我使用getPermission()方法时,它也会返回0。
)。

这是一个代码片段

    // 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上测试程序。

感谢您的帮助。


阅读 338

收藏
2020-12-03

共1个答案

一尘不染

这看起来像是基础框架的问题。
此链接显示了在远程设备上发现服务/特性时框架执行的代码块。您可以看到BluetoothGattCharacteristic创建新内容时,权限参数始终以形式传入0

此外,即使稍后读取特性,也仅更新特性的值,而不会在对象上重置其他参数。

取而代之的是,Android似乎尝试基于反复试验来处理身份验证/权限问题。换句话说,该框架始终尝试进行基本的读/写操作,并且如果由于身份验证原因而失败,则会自动使用请求的MITM身份验证再次尝试。

2020-12-03