在 iPhone 上启用 BLE。默认不工作

Posted

技术标签:

【中文标题】在 iPhone 上启用 BLE。默认不工作【英文标题】:Enabling BLE on iPhone. Not working by default 【发布时间】:2013-06-08 12:05:55 【问题描述】:

我是 ios 开发的新手。一个月前我开始构建一个 BLE 应用程序,它在前台和后台运行良好,BLE 连接本身没有任何问题。 我上周恢复了我的手机。重新启动后,我尝试在 iPhone 上运行我的应用程序。它开始崩溃。代码在这一行被破坏了。

[self.manager retrievePeripherals:[NSArray arrayWithObject:(id)peripheral.UUID]];

带有 SIGABRT 信号。我安装了 endomondo 并尝试将我的传感器与它配对。它要求我启用 ble,我在对话框上点击是,皮带配对了。之后我检查了我的应用程序,它也开始正常工作。 我的想法是,因为在制作我自己的应用程序之前,我已经安装了 endomondo,所以我的应用程序已经启用了一些东西可以正常工作。在没有任何其他应用程序为我执行此操作的情况下,我无法真正理解需要做什么才能使我的应用程序能够进行 ble 操作。 帮我解决这个问题。我们是否需要设置其他东西来启用 ble 而不仅仅是从设置中启用蓝牙?

【问题讨论】:

peripheral.UUID 中有什么?那么,一开始有什么? retrievePeripherals 用于要求中心通过其 UUID 检索已知外围设备的列表。你的 peripheral.UUID 是 null 吗? 是的,只有当它给出错误时它才为空。是否可以通过直接调用 [manager connectPeripheral] 来克服它,然后当它一旦连接时,我每次都使用retrievePeripheral 只有在您知道外围设备的情况下才能检索外围设备...检查 CoreBluetooth 温度传感器,来自 Apple 的样本。可以查看方法loadDevices... 【参考方案1】:

如果我没记错的话,某些版本的 iOS 6.x 会在外围设备的 UUID 属性周围返回奇怪的结果。有时,当它应该是合法值时,它会以 nil 的形式返回。我最终在我的一个应用程序中对这些情况使用了这样的解决方法:

if (aPeripheral.UUID != nil)

    [centralManager retrievePeripherals:[NSArray arrayWithObject:(id)aPeripheral.UUID]];

else

    [self centralManager:centralManager didRetrievePeripherals:[NSArray arrayWithObject:aPeripheral]];

将外围设备直接传递到委托方法中,避免了检索步骤,当我这样做时,应用程序似乎可以可靠地工作。我相信在我升级到更新的 iOS 6.0 版本后不再需要这个。

【讨论】:

我也想过这样做,但我不确定这是否是最佳方式。但我现在只接受这个。谢谢!

以上是关于在 iPhone 上启用 BLE。默认不工作的主要内容,如果未能解决你的问题,请参考以下文章

iphone:UIScrollView 分页启用,无缩放和无预览

如何检查 iPhone 上是不是启用了通知

iPhone iOS如何在启用缩放时使UIScrollView与UIRotationGestureRecognizer一起工作?

Android BLE 4.3 onDescriptorWrite 在启用特征通知时返回状态 128

是否可以在iPhone中以编程方式启用热点模式?

在 iPhone 上确定用户是不是启用了本地通知