Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt BLE For Android:无法读取自定义服务的特征值_Android_Qt_Bluetooth - Fatal编程技术网

Qt BLE For Android:无法读取自定义服务的特征值

Qt BLE For Android:无法读取自定义服务的特征值,android,qt,bluetooth,Android,Qt,Bluetooth,以下是设置: 一位同事创建了一个小型固件,该固件大约每秒更改一次自定义服务(非标准唯一128位UUID)中自定义特性的值。用于传输的设备使用BLE(蓝牙低功耗)实现 我需要实现一个小应用程序(仅作为工作示例)来监控所述值。然而,我遇到了一个小问题。我按照这里的说明进行了操作:通过使用以下代码,我成功地发现了服务并“读取它”(我获得了UUID): void BLETest::on_stateChanged(QLowEnergyService::ServiceState state){ #ifdef

以下是设置:

一位同事创建了一个小型固件,该固件大约每秒更改一次自定义服务(非标准唯一128位UUID)中自定义特性的值。用于传输的设备使用BLE(蓝牙低功耗)实现

我需要实现一个小应用程序(仅作为工作示例)来监控所述值。然而,我遇到了一个小问题。我按照这里的说明进行了操作:通过使用以下代码,我成功地发现了服务并“读取它”(我获得了UUID):

void BLETest::on_stateChanged(QLowEnergyService::ServiceState state){
#ifdef DBUG
    logger->out("Service Monitor State: " + lowEnergyServiceStateToString(state),Logger::LC_ORANGE);
#endif

    if (state == QLowEnergyService::ServiceDiscovered){
        QString chars = "";
        QList<QLowEnergyCharacteristic> clist = monitoredService->characteristics();
        for (int i = 0; i < clist.size(); i++){
            chars = clist.at(i).uuid().toString() + " - " + clist.at(i).name() + ": " + QString(clist.at(i).value());
            chars = chars + ". Value size: " + QString::number(clist.at(i).value().size()) + "<br>";
        }
        if (chars.isEmpty()){
            chars = "No characteristics found";
        }
        logger->out(chars);
    }

}
void BLETest::on_stateChanged(QLowEnergyService::ServiceState){
#ifdefdbug
logger->out(“服务监视器状态:+LowerenergyServiceStateTostring(状态),logger::LC_ORANGE);
#恩迪夫
if(state==QLowEnergyService::ServiceDiscovery){
QString chars=“”;
QList clist=monitoredService->characteristics();
对于(int i=0;i”;
}
if(chars.isEmpty()){
chars=“未找到任何特征”;
}
记录器->输出(字符);
}
}
现在,这将打印服务的UUID,但值字节数组的大小为零。使用另一个(私有应用程序),我们实际上可以看到该服务中特征的值字段正在变化。此外,即使与服务的对象特征Changed signal建立了连接,该信号也从未被触发,我想这是因为特征值无法读取

我的问题是:代码有没有什么你想不出来的错误?或者仅仅是因为当前Qt Bluetooth的BLE实现无法监控定制服务和特性


PD:我正在使用Qt5.7.1

您必须通过将0x01写入客户端特征配置描述符(CCCD)来启用特征通知


也许你需要阅读描述词?gatt服务器是否将数据写入特征或描述符?特征。这是肯定的,因为它是作为XML定义编写的,在代码中显式地表示Characteristic。该特性具有修改和读取属性。我已将答案标记为正确,因为它本质上就是我所做的。但是,客户端是由一个使用XML设置特性的专用环境配置的。我现在可以读取原始值,但没有收到其更改的通知。即使我对其进行投票,其值也保持不变。我又提出了一个问题
foreach(QLowEnergyCharacteristic c, srv->characteristics()){
    QLowEnergyDescriptor d = c.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration);
    if(!c.isValid()){
        continue;
    }
    if(c.properties() & QLowEnergyCharacteristic::Notify){ // enable notification
        srv->writeDescriptor(d, QByteArray::fromHex("0100"));
    }
    if(c.properties() & QLowEnergyCharacteristic::Indicate){ // enable indication
        srv->writeDescriptor(d, QByteArray::fromHex("0200"));
    }
}