gpt4 book ai didi

ios - CBPeripheralManager 连接回调

转载 作者:可可西里 更新时间:2023-11-01 05:30:14 24 4
gpt4 key购买 nike

我正在尝试在两台 iOS 设备之间建立蓝牙连接。这个想法是一个设备提供服务,多个设备连接到它:

设备 A(服务):用户滑过演示文稿

设备 B(多客户端):用户观看演示,无交互

根据我的理解,提供服务的应该通过创建 CBPeripheralManager 和实现 CBPeripheralManagerDelegate -> Device A 来宣传它并分别成为外围设备

另一方面,有多个中央设备使用 CBCentralManager 并实现 CBCentralManagerDelegate 扫描外围设备。建立连接后,它们使用 CBPeripheral 类和 CBPeripheralDelegate -> Device B

向外设发送读写请求

现在我很困惑:据我了解,设备 A 无法直接向设备 B 发送信息,甚至无法识别连接是建立还是丢失。但是客户端(设备 B)可以读取和写入数据并获得连接和断开连接通知。

所以我的第一个想法是交换角色。现在,中央设备通过扫描宣传他们想要使用该服务(?!?)的设备来提供服务,并且多个外围设备可以连接到一个中央设备。已经听起来一定是错误的,对吧?问题来了:现在,如果连接已建立或丢失,外围设备(观看演示的用户)将不再收到通知(aaahhhhh)。

现在的问题是:是否有一种好方法可以使 iOS 设备成为外围设备并识别连接和断开连接(其中应包括按距离等断开连接)?

添加:在 WWDC 2012 session 705 (Link to presentation slides)提到了 central:didConnect 和 central:didDisconnect 方法。但即使在 CBPeripheralManagerDelegate 的 iOS 7 beta 文档中也没有提到这些方法。也许这是一条死胡同,Apple 现在正在 mock 我......

感谢您的帮助!

本杰明

最佳答案

你应该让设备 A(演示者)成为外围设备,为服务做广告,让设备 B(观众)成为中心,它订阅外围设备的服务。

您可以使用 CBPeripheralManagerDelegate 在 central 连接到您的外围设备时获取通知。这是 CBPeripheralManager 委托(delegate)方法的文档:CBPeripheralManagerDelegate Protocol Reference

这是您需要实现的方法来识别中央设备(设备 B,查看器)何时连接到您的外围设备(设备 A,演示者):

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic

当中央设备(设备 B,查看器)与外围设备(设备 A,演示器)断开连接时,这是您需要识别的方法:

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic

当您需要通知订阅中心(设备 B,观众)幻灯片已更改时,请使用此方法(newValue 是演示文稿中更新位置的某种指示符,如幻灯片编号):

[self.peripheralManager updateValue:newValue forCharacteristic:yourCharacteristic onSubscribedCentrals:nil];

如果您想查看蓝牙 LE 与同时充当中央设备和外围设备的设备共享的简单演示,您可以查看此项目:SimpleShare

希望对您有所帮助!让我知道是否可以澄清一些事情。

劳拉

关于ios - CBPeripheralManager 连接回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com