问题标签 [cbperipheralmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 由于 API 滥用,CoreBluetooth 与未使用的外围设备断开连接
我正在尝试使用 CoreBluetooth 从 iPad 连接到 MacBook Pro。
这是我的代表团CBCentralManagerDelegate
:
但是当我扫描时,我在日志中得到了这个错误:
为什么会这样?
ios - 更新失败后未调用 peripheralManagerIsReadyToUpdateSubscribers
每当我断开连接并尝试连接时。我没有收到 peripheralManagerIsReadyToUpdateSubscribers 并且第一次更新只会失败。
我正在按照以下步骤
- 启动广告并与中心建立连接。
- 现在尝试更新队列中的值。第一个将成功,第二个更新将失败。然后我会收到 peripheralManagerIsReadyToUpdateSubscribers,然后我会再次继续更新。
- 与中心关闭连接,删除服务并重新开始广告并添加服务。然后我会再次收到 peripheralManager:didSubscribeToCharacteristic,现在如果我尝试更新(updateValue:forCharacteristic:onSubscribedCentrals)总是失败,我永远不会收到 peripheralManagerIsReadyToUpdateSubscribers。
此行为仅适用于新的 iOS 版本 10.0.2。对于 9.3.3 等旧版本的 iOS,我没有遇到这个问题。
swift - CoreBluetooth : CBPeripheral 没有成员 setnotifyValue iOS 10.0
我正在开发一个需要与外部设备建立蓝牙连接的应用程序,并且我成功地与外部设备建立了连接。
现在,在下面的 CBPeripheralManager 委托中,在 iOS 10 中生成错误并在 iOS 9.0 中完美运行
我在下面的行中收到错误,
它说 CBPeripheral 没有成员 setNotifyValue。我不明白。我做了一些解决方法,但没有得到任何帮助。
ios - CoreBluetooth、通知和固件更新
我正在快速开发一个客户端应用程序,它从 ble 外围设备读取一些值。
问题是,在外围设备上更新固件后,应用程序停止接收来自标记为通知的特征的通知。
为了绕过这种行为,我必须从 iPhone 的设置中手动忘记 ble 外围设备。
这是正常行为还是我在这里遗漏了什么?
swift - 使用 Peripheral Manager swift 设置和发送字符串
我已经设置好我CBCentralManager
的设备以搜索设备,并准备好接收和检查更新信息的基本结构。
我似乎无法掌握如何制作CBPeripheralManager
ViewController 以及如何CBCentral
通过按下按钮从单独的应用程序发送我的数据。最简单的方法是发送一些字符串。
这是我的CBCentralManager
视图控制器。
这是通过完全相反的方式完成的吗?我想确保我在正确的方向上看待这个问题。
更新
在另一个应用程序中,我试图像这样开始这个过程:
下一步是开始做广告吗?
ios - didDisconnectPeripheral 自己调用
我有一个应用程序应该使用 CoreBluetooth 一次连接到不同的设备。我的问题是发生意外断开连接。一旦我连接到任何外围设备,该方法
被自己调用,这意味着设备已断开连接。我浏览了文档,但没有发现任何有用的信息。我知道 BLE 可以是一对多的,那么这个问题来自哪里?我检查了iOS BLE 外围设备中的答案,在调用 discoverServices 后立即断开连接,并且我已经将 CBPeripherals 保存在一个数组中,但问题仍然存在。
我得到的输出示例
Disconnect from <CBPeripheral: 0x15e85a80, identifier = 1BD21078-B2B7-1EE9-5BDC-324DEC7A1BD6, name = Mac mini, state = disconnected>
错误域 = CBErrorDomain 代码 = 6 “连接已意外超时。” UserInfo={NSLocalizedDescription=连接意外超时。}
objective-c - OBJ-C 连接到蓝牙中的服务
***** 编辑:我现在正在工作,请参阅下面接受的答案和此问题中的更新代码... *****
好的,我对微控制器代码非常陌生,但对 Objective-c 蓝牙代码也很陌生。
我想要的是
我想用一个 iOS 应用程序连接到我的蓝牙 Bluefruit Friend UART LE(NRF51822 芯片)并向它发送一个 128 位令牌并让它响应一个 HID 消费者代码。
我试过的
目前,我可以使用串行监视器连接到芯片并通过我想要的消费者代码发送,它会通过执行该操作来响应。因此,如果我发送代码以使设备静音或增大/减小音量,它将在我的 iOS 设备中静音/增大/减小音量。这很棒!
现在我需要在笔记本电脑上没有串行监视器的情况下执行此操作,并引入发送令牌而不是 HID 代码的概念,并让它以 HID 代码响应。这非常棘手,似乎向我介绍了服务和渠道等新概念。似乎大多数蓝牙设备都带有许多可用的自定义服务,开发人员可以添加这些服务,并允许将读取与写入操作分开。每个服务都允许许多特征,例如读/写/通知/更新等等。
所以...我假设可以通过这些服务使用我想要的解决方案。如果我有一个用于读取令牌的服务和另一个用于编写 a 的服务,GATT HID Consumer Code
那么我应该能够通过 Objective-c 中的蓝牙分别连接到每个服务。这将使我能够区分发送令牌和接收回代码。
问题
正如你所看到的,我在下面的代码中有很多 NSLogs,目前这些日志都没有显示我在盒子上放置的任何服务。服务总是打印为零。如果我使用名为 的应用商店中的 iOS 应用RF Connect
,我可以连接到盒子,我可以看到这些服务肯定在那里......
我试过的代码
这是我一直用来尝试检测设备服务的当前代码......我认为这是一个从这里开始的好地方。
蓝牙管理器.h
蓝牙管理器
最后的想法...
我在如何在 Arduino 板/任何 BT 设备中编写自定义服务/特性方面的知识差距显然是这里的问题。我不确定我是否应该在设备或我的 OBJ-C 应用程序中创建服务/特征。
考虑到现在这些是在设备而不是应用程序中创建的,这个概念现在很可笑。
ios - iOS有什么方法可以找到我们连接到任何设备的确切时间?
如果在我们的应用程序中,我们充当peripheral mode
. 当我们连接到任何设备时,我们无论如何都不需要找到。我想记录我的设备连接到另一台设备的时间。就像central mode
我们有这个CBPeripheralState
来获取连接到我们的外围设备的当前状态一样。但我找不到CBPeripheralState
像peripheral
.
ios - 蓝牙数据的后台处理在 iOS 中“基于会话”意味着什么?
在 Apple 的后台执行文档中,解释说“任何支持蓝牙数据后台处理的应用程序都必须是基于会话的。... 应用程序必须提供一个接口,允许用户启动和停止蓝牙事件的传递。然后,该界面应根据需要打开或关闭会话。
我们的 iOS 应用程序充当 CBPeripheralManager 与 OS X 上的 CBCentralManager 通信。我们在阻止应用程序暂停和对来自中央管理器的通信无响应时遇到问题。
我们在应用程序的 Info.plist 文件中使用 bluetooth-peripheral 值声明 UIBackgroundModes 键,这应该让 iOS 允许我们在后台操作并减少限制。在后台,我们的应用程序处理来自中央的通信并按预期回复数小时,但最终被暂停。
该文档暗示我们应该管理一个会话,也许以 NSURLSession 管理会话的方式,但没有 NSSession 或 CBSession 之类的东西,我在文档中找不到与 Core Bluetooth 相关的 Session 的其他提及。
有任何想法吗?
ios - iPhone 8/X BLE 广告失败
我们有一个自 iOS 10 以来一直在使用的 iOS 外围模式应用程序。我们现在开始看到在 iPhone 8 或 X 上使用该应用程序时出现问题。
我们看到的失败是即使peripheralManager.startAdvertising(nil)
函数调用成功完成,应用程序也没有 Advertise(没有抛出错误)
通过控制台应用程序查看日志时,我看到以下条目似乎令人不安......
我们没有更改我们应用程序中的任何代码,它似乎可以在 iPhone 7 Plus 之前的旧设备上正常运行。可以通过在设置(不是控制中心)中循环蓝牙或重新启动设备来缓解此问题。但是,这个问题会回来,而且是不可预测的。
有没有其他人遇到过这个问题或对可能发生的事情有任何见解?
谢谢