问题标签 [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 - didWriteValueForCharacteristic 在特征值中为空
发送时调用委托方法。
但是,在这里我得到空值。
我也可以在外围应用程序中接收,
接收结果值相同为空。
将数据发送到外围设备时无法识别问题。任何答案都会对我有很大帮助
ios - 在 CBPeripheralManager 中,如何知道用户在尝试配对时是否按下取消按钮
我正在使用 CBPeripheralManager 在 iPhone 和设备之间建立 BLE 连接。
如果 Central 尝试与外围设备配对,则会弹出蓝牙配对警报控制器,用户可以选择使用哪一个。他们中的大多数人会按下连接按钮。
但是有没有办法知道用户何时按下取消按钮?
委托 API 会很好,但我找不到。
ios - CBPeripheralManager 在一个应用程序中不受支持,而在另一个应用程序中打开
我遇到了CBPeripheralManager
我有两个应用程序的问题,第一个是演示应用程序,我已经测试了蓝牙的检查状态,第二个是具有此工作解决方案的应用程序。
根据这个解决方案,我已经成功地在演示应用程序中实现了检查,但问题从第二个应用程序开始。CBPeripheralManager
总是返回状态Unsupported
。我正在 iPhone 6s 上测试它。我现在知道我做错了什么。
已编辑
视图控制器
信标管理器
ios - 如何在视图之间保持 CoreBluetooth 连接处于活动状态
我已经为基于 Apples CoreBluetooth TemperatureSensor 示例(https://developer.apple.com/library/ios/samplecode/TemperatureSensor/Introduction/Intro.html)的应用程序实现了 CoreBluetooth。它非常适合搜索设备,在表格视图中填充结果,选择一个并连接。我的问题是我想在整个应用程序的视图之间保持连接。
在我当前的设置中,我有一个带有按钮的视图,可将您带到蓝牙设置视图。蓝牙视图以模态方式呈现,在这里我搜索 BT 设备并连接到其中一个。一旦我关闭视图,连接就会丢失,可能是因为它没有被保留?
因此,我使用单例实现来保持对象(也如 Apple 示例中那样),希望保持连接处于活动状态,但没有运气。但是,我可以从单例中检索对象并调用 connectPeripheral 并重新连接,但从用户的角度来看,用户在刚刚连接之前必须再次输入密码并不是那么好。
那么,我怎样才能在视图之间保持蓝牙连接,例如当有一个连接 BT 设备的设置视图时,然后在剩余的应用程序中使用相同的连接?
更新:包含代码
另外值得一提的是,我的课程(包括共享实例)不仅基于 Apple 示例,还基于 HMSoft 的 SerialGATT 实现(我猜它是基于 Apple 的实现)。这是我在 git https://github.com/ezefranca/kit-iot-wearable-ios/blob/master/kit-iot-wearable-ios/SerialGATT.h上找到的一个地方的链接
因此,对于我的单身人士,我在 SerialGATT.h 中添加了以下内容(也尝试了 id,并不是说它有所作为)
在 SerialGATT.m 我有
在我的蓝牙视图控制器中使用 SerialGATT 和单例时,我实现了 SerialGATT 的委托方法,然后在 viewDidLoad 中有以下内容
注意!在将其简单命名为“delegate”之前,我已将原始 SerialGATT 示例中的 discoveryDelegate 重命名。discoveryDelegate 是 Apple 示例中使用的名称,并不重要。
从这里开始,在我的模态蓝牙设置视图中一切正常。如上所述,我可以搜索和连接设备。正在召集代表,一切都很好,花花公子。但是,当我关闭模式时,设备会断开连接,但在访问单例时我仍然可以在其他视图中找到对象,例如重新连接。但话又说回来,我宁愿保持连接有效,而不是重新连接并不得不再次输入密码。
swift - 外围设备未连接 - Swift
在我的 Swift 应用程序中,我有一个应该找到蓝牙设备并连接到它的视图。蓝牙设备已开机。我能够扫描并找到该设备,然后我调用该函数来连接它,但我没有得到任何反馈。我不确定为什么它无法连接。
didFailToConnectPeripheral 或 didConnectPeripheral 都没有返回任何值。
我怎样才能让它工作?
iphone - CoreBluetooth APIMISUSE(发送命令 - 外围设备未连接)
我正在使用的系统使用以下场景:
- 连接蓝牙 LE 设备
- 发现服务和特点
- 将命令写入 TX 特性并接收响应
以上工作正常 90% 的时间。系统有时会进入第三步不断失败的状态(即使第 1 步和第 2 步成功,设备也没有任何响应。重新启动应用程序/电话/BLE 设备并不能解决这个问题。阻塞是恒定的。什么解决了问题是从 iOS 系统设置中手动取消配对设备。查看 BLE 诊断日志我得到了这个:
“pon.mar 7 21:27:30 首选项 [380]:[CoreBluetooth] API 误用:只能在连接状态下接受命令”
但是,在发送命令之前,我已经调试了应用程序,并且我 100% 已建立连接并且发现了服务和特性。任何想法?有人面临类似的问题吗?
ios - centralManagerDidUpdateState 没有被调用
我对 iOS 编码并不陌生,但对 iOS 中的 BLE 非常陌生。
我已在主视图控制器中成功编写代码以访问和写入 BLE 设备。所以所有外围设备和管理器的东西都经过测试。
我的应用程序将获取 BLE 设备列表,连接到它们以获取序列号,断开与它们的连接,然后将它们放入 tableView 中。当用户选择一个时,我需要转到另一个视图并重新连接。我想编写另一个类作为连接到外围设备的实用程序,我成功地将其传递给实用程序并在实用程序中对其进行读写。外围设备状态已连接。
每次我尝试写入外围设备时,我的代码都会崩溃。然而,外设报告数据已写入。
因此,为了找出问题所在,我开始尝试读取具有相同结果的外围设备,崩溃。
我在实用程序中启动了一个新的管理器,并且没有在那里调用 centralManagerDidUpdateState。我也试过了,没有经理认为如果我知道外围设备,它就可以工作。
那么,如何让 centralManager 在新课程中工作?你必须以某种方式阻止主班的经理吗?
这是在主控制器中有效的线路,但在我的实用程序中无效。
谢谢!
ios - iOS 外设在电源切换后未收到写入请求
我有一个 iOS 应用程序,它设置为CBPeripheralManager
具有多个特征的外围设备和服务。在用户打开控制中心并关闭和打开蓝牙后,我试图实现重新连接。看起来我的服务可以正确恢复广告,但我没有收到任何写请求回调。我期待‑peripheralManager:didReceiveWriteRequests:
被调用,但是一旦重新打开蓝牙,它就永远不会发生。
在这种情况下,我们需要做些什么特别的事情吗?根据CBPeripheralManager
文档,如果外围状态低于 PoweredOff,我们只需要显式重新启动广告。我看到它转到 PoweredOff,然后是 PoweredOn,如果我查询它,‑isAdvertising
返回YES
,并添加服务崩溃并出现异常,因为该服务已添加。
ios - CoreBluetooth `retrieveConnectedPeripheralsWithServices` 返回断开连接的外围设备
我想知道CBManager
's的语义retrieveConnectedPeripheralsWithServices
。每次我使用它时,我都会CBPeripheral
用 state 返回实例CBPeripheralStateDisconnected
。
再次连接不是问题,但是这种方法不应该返回连接的外围设备吗?
ios - 同时检测多个 BLE 超出范围的最佳方法是什么?
问题陈述:如果我有多个 BLE,我将它们一一连接。但是现在当超过 1 个 BLE 同时超出范围时,我无法检测到核心蓝牙框架中央管理器中的状态。
解释 -
1)如果我有一个BLE并且我连接到那个BLE,当那个BLE超出范围时,它会调用- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
外围设备的方法。
2) 在- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
方法中- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
,只要 BLE 再次进入该范围,我就要求将其连接起来。
3) 这种行为适用于单个 BLE 一次超出范围的情况。并在进入范围内时再次连接。
4) 但当多个 BLE 同时超出范围时,上述行为效果不佳。
这是我的- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
代码
提前致谢。