有时从未触发DiscoverServices

Passion.Guo

大多数情况下,这在我的应用程序中正常运行。不幸的是,有时在调用discoverservice之后从未触发过它。

我的代码是:

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral     *)peripheral
{
    NSLog(@"Did connect to peripheral: %@", peripheral);
    [self.delegate statusMessage:[NSString stringWithFormat:@"Did connect to peripheral: %@\n", peripheral]];

    peripheral.Delegate = self;
    NSArray *serviceArray = [NSArray arrayWithObject:_uuid_tpms_sensor_service];
                [_peripheral discoverServices:serviceArray];
    [peripheral discoverServices:serviceArray ];
}

与之相关的一些帖子是

最终结论应该是iOS中的一个问题。我的问题是,鉴于这是iOS问题,该如何解决?

Passion.Guo

非常感谢Larme和henrik,我从您的回复中得到了很多想法。

经过三天的验证,看来我已经找到解决该问题的方法(该问题很可能是iOS的蓝牙堆栈的局限性而非问题)

我想总结一下我的发现并在这里解决:

[根本原因]

  • iOS中的蓝牙堆栈不够健壮,因此,在某些意外的API调用之后,内部状态机会损坏。
  • 由于BTLE无线电遵循一定的模式,一次与一个设备连接查询进行交互,因此BLE应用程序应该follow the API sequence of connectperiperal-->discover-->read-->disconnect(由本地,对等设备触发或在链路层上监视超时)。
  • 苹果承认这是iOS中的问题。

[解析度]

  • 遵循上面描述的API调用顺序

希望摘要对其他人有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

animationstart有时仅触发?

来自分类Dev

有时会触发JS退格键按下事件,有时不会触发

来自分类Dev

触发点击有时不起作用

来自分类Dev

移动Safari有时不触发点击事件

来自分类Dev

有时仅触发角度行为主题

来自分类Dev

触发并忘记异步Task方法,有时不调用

来自分类Dev

触发点击有时不起作用

来自分类Dev

有时只会触发图片加载错误

来自分类Dev

有时,ConflatedBroadcastChannel会在没有任何操作的情况下触发最近的值

来自分类Dev

EWS交换有时不使用StreamingSubscription触发NewMail事件

来自分类Dev

Unity3d有时游戏结束条件不会触发

来自分类Dev

TeamCity 9.1.5:构建配置的计划触发器不稳定(有时可以工作)

来自分类Dev

有时在Firebase函数的触发器中发生“错误:13内部:发生内部错误”

来自分类Dev

Postgresql触发函数有时无法正确更新其目标-可能的竞争条件?

来自分类Dev

TeamCity 9.1.5:构建配置的计划触发器不稳定(有时可以工作)

来自分类Dev

Vue.js 子组件事件有时不会触发

来自分类Dev

Laravel有时vs |有时

来自分类Dev

有时是只读属性

来自分类Dev

jCarouselLite有时出错

来自分类Dev

jCarouselLite有时出错

来自分类Dev

动画(有时)很慢

来自分类Dev

有时是只读属性

来自分类Dev

窗户有时黑

来自分类Dev

AnyClass 是 NSObjectProtocol ......有时?

来自分类Dev

为什么ACTION_DOWN有时可能不会在Android中为ListView触发

来自分类Dev

JSON有时数组有时对象

来自分类Dev

ListActivity onScroll从未触发

来自分类Dev

从未触发AuthenticationSuccessEvent

来自分类Dev

有时会触发两次