【问题标题】:CBCentral connection to a CBPeripheral without a scanCBCentral 连接到 CBPeripheral 无需扫描
【发布时间】:2014-04-22 08:55:09
【问题描述】:

我在 7.1 上有两台 iOS 设备,一台用作 CBCentral,另一台用作 CBPeripheral。两台设备都运行我自己创建的软件,所以所有的 UUID/CBService/CBCharacteristic 都是我自己生成的,所有的参数都是固定的,随时都知道。

此外,两台设备都可以访问共享服务器来存储我可能需要的任意数据。

鉴于我控制着整个生态系统,有没有办法让 CBCentral 设备连接到 CBPeripheral 设备而无需先拨打scanForPeripheralsWithServices: 电话?从某种意义上说,我想在两个设备相互接触之前“教”Central 关于 Peripheral 的存在。

也许 CBPeripheralManager 单元可以将一些数据或值发布到 CBCentralManager 单元可以拉取的服务器,然后直接分配/初始化其自己的 CBPeripheral 对象以用于connectPeripheral:options:

【问题讨论】:

    标签: ios ios7 core-bluetooth


    【解决方案1】:

    不,你不能。核心蓝牙使用内部生成的 UUID 来识别对等点。如果不扫描,系统将无法识别外设,您将无法调用retrievePeripheralsWithIdentifiers: 方法获取可以调用connectPeripheral: 的CBPeripheral。

    由于无法注入 UUID,因此您必须至少扫描一次。但取决于很多因素,可能很多次。

    【讨论】:

    • 我还要补充一点,您不能存储 CBPeripheral,因为它没有实现 NSCoding 协议。这就是我一开始想做的,在我的应用程序中(用户在第一次启动时得到扫描,之后再也没有)。您必须在每次启动时进行扫描。
    • @allpro - 嗯,这证实了我自己的发现。看起来,“内部生成的 UUID”是这方面的一大障碍。我希望比我聪明的人有办法!
    • @Jissay - 是的,我也发现了。老实说,扫描的需要并不像两台处于后台模式的设备无法发现彼此那样让我感到沮丧,尽管它们是专门为彼此广播和扫描的,而没有其他人。缺少服务广告 + 无法在后台对所有附近的设备进行一般性扫描,这对下层地区来说是真正的一两次打击。
    • 当然,这种无能已经搞砸了许多项目。此外,Apple 认为这将是一个隐私问题的论点似乎不太相关。也许功率要求是唯一合理的原因。无论如何,我们必须忍受它,直到有人想出一个持续时间更长一个数量级的电池。
    • 是的,如果相关方选择加入,我看不到隐私问题。我确实看到了电源问题。然而,像 Estimote 这样的设备在一块锂电池上可以使用两年。我认为 iOS 设备每晚充电一次就可以管理一天的广播。好吧,这是对未来的希望!
    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2018-05-17
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2012-06-08
    相关资源
    最近更新 更多