ios – CoreBluetooth在重新连接时不会发现服务

ios – CoreBluetooth在重新连接时不会发现服务,第1张

概述我们有一个与我们自己的BLE设备通信的应用程序.当我们推送新固件时,我们重新启动并获得centralManager:didDisconnectPeripheral:error:和centralManager:didConnectPeripheral:但是当我们调用[peripheral discoverServices:nil]时,我们永远不会得到外围设备的回调:didDiscoverServic 我们有一个与我们自己的BLE设备通信的应用程序.当我们推送新固件时,我们重新启动并获得centralManager:dIDdisconnectPeripheral:error:和centralManager:dIDConnectPeripheral:但是当我们调用[peripheral discoverServices:nil]时,我们永远不会得到外围设备的回调:dIDdiscoverServices:.我们在最初连接时得到它,但在重新连接时却没有. CoreBluetooth似乎知道服务和特性是什么,因为我们可以与设备进行交互,但我们希望能够在重启后立即编写特性,但无法找到可靠的方法来判断它是什么时候.

– =编辑= –
这是我们用于编写特征的代码.当我们尝试在第二次调用dIDConnect时调用它时,它会失败,因为外围设备没有任何服务:

+(voID)writeData:(NSData*)data toperipheral:(CBPeripheral*)peripheral service:(Nsstring*)sCBUUID characteristic:(Nsstring*)cCBUUID{    // Sends data to BLE peripheral to process HID and send EHIF command to PC    for(CBService *service in peripheral.services)    {        if([service.UUID.stringValue isEqualToString:sCBUUID])        {            for(CBCharacteristic *characteristic in service.characteristics)            {                if([characteristic.UUID.stringValue isEqualToString:cCBUUID])                {                    /* EVERYTHING IS FOUND,WRITE characteristic ! */                    [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];                    return;                }            }        }    }}
解决方法 我记得在我使用CoreBluetooth的工作中,这种行为是有意的,因为它以这种方式记录.断开连接后,我们不应重用相同的外围设备实例. Instead we should ask CBCentralManager to give us a fresh CBPeripheral using its known peripheral UUID.参见: CBCentralManager.retrievePeripheralsWithIdentifiers: 总结

以上是内存溢出为你收集整理的ios – CoreBluetooth在重新连接时不会发现服务全部内容,希望文章能够帮你解决ios – CoreBluetooth在重新连接时不会发现服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1025938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存