问题标签 [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.

0 投票
0 回答
735 浏览

ios - didWriteValueForCharacteristic 在特征值中为空

发送时调用委托方法。

但是,在这里我得到空值。

我也可以在外围应用程序中接收,

接收结果值相同为空。

将数据发送到外围设备时无法识别问题。任何答案都会对我有很大帮助

0 投票
1 回答
167 浏览

ios - 在 CBPeripheralManager 中,如何知道用户在尝试配对时是否按下取消按钮

我正在使用 CBPeripheralManager 在 iPhone 和设备之间建立 BLE 连接。

如果 Central 尝试与外围设备配对,则会弹出蓝牙配对警报控制器,用户可以选择使用哪一个。他们中的大多数人会按下连接按钮。

但是有没有办法知道用户何时按下取消按钮?

委托 API 会很好,但我找不到。

0 投票
0 回答
227 浏览

ios - CBPeripheralManager 在一个应用程序中不受支持,而在另一个应用程序中打开

我遇到了CBPeripheralManager我有两个应用程序的问题,第一个是演示应用程序,我已经测试了蓝牙的检查状态,第二个是具有此工作解决方案的应用程序。

根据这个解决方案,我已经成功地在演示应用程序中实现了检查,但问题从第二个应用程序开始。CBPeripheralManager总是返回状态Unsupported。我正在 iPhone 6s 上测试它。我现在知道我做错了什么。

已编辑

视图控制器

信标管理器

0 投票
0 回答
431 浏览

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 示例中使用的名称,并不重要。

从这里开始,在我的模态蓝牙设置视图中一切正常。如上所述,我可以搜索和连接设备。正在召集代表,一切都很好,花花公子。但是,当我关闭模式时,设备会断开连接,但在访问单例时我仍然可以在其他视图中找到对象,例如重新连接。但话又说回来,我宁愿保持连接有效,而不是重新连接并不得不再次输入密码。

0 投票
1 回答
5000 浏览

swift - 外围设备未连接 - Swift

在我的 Swift 应用程序中,我有一个应该找到蓝牙设备并连接到它的视图。蓝牙设备已开机。我能够扫描并找到该设备,然后我调用该函数来连接它,但我没有得到任何反馈。我不确定为什么它无法连接。

didFailToConnectPeripheral 或 didConnectPeripheral 都没有返回任何值。

我怎样才能让它工作?

0 投票
1 回答
2140 浏览

iphone - CoreBluetooth APIMISUSE(发送命令 - 外围设备未连接)

我正在使用的系统使用以下场景:

  1. 连接蓝牙 LE 设备
  2. 发现服务和特点
  3. 将命令写入 TX 特性并接收响应

以上工作正常 90% 的时间。系统有时会进入第三步不断失败的状态(即使第 1 步和第 2 步成功,设备也没有任何响应。重新启动应用程序/电话/BLE 设备并不能解决这个问题。阻塞是恒定的。什么解决了问题是从 iOS 系统设置中手动取消配对设备。查看 BLE 诊断日志我得到了这个:

“pon.mar 7 21:27:30 首选项 [380]:[CoreBluetooth] API 误用:只能在连接状态下接受命令”

但是,在发送命令之前,我已经调试了应用程序,并且我 100% 已建立连接并且发现了服务和特性。任何想法?有人面临类似的问题吗?

0 投票
1 回答
1000 浏览

ios - centralManagerDidUpdateState 没有被调用

我对 iOS 编码并不陌生,但对 iOS 中的 BLE 非常陌生。

我已在主视图控制器中成功编写代码以访问和写入 BLE 设备。所以所有外围设备和管理器的东西都经过测试。

我的应用程序将获取 BLE 设备列表,连接到它们以获取序列号,断开与它们的连接,然后将它们放入 tableView 中。当用户选择一个时,我需要转到另一个视图并重新连接。我想编写另一个类作为连接到外围设备的实用程序,我成功地将其传递给实用程序并在实用程序中对其进行读写。外围设备状态已连接。

每次我尝试写入外围设备时,我的代码都会崩溃。然而,外设报告数据已写入。

因此,为了找出问题所在,我开始尝试读取具有相同结果的外围设备,崩溃。

我在实用程序中启动了一个新的管理器,并且没有在那里调用 centralManagerDidUpdateState。我也试过了,没有经理认为如果我知道外围设备,它就可以工作。

那么,如何让 centralManager 在新课程中工作?你必须以某种方式阻止主班的经理吗?

这是在主控制器中有效的线路,但在我的实用程序中无效。

谢谢!

0 投票
1 回答
71 浏览

ios - iOS 外设在电源切换后未收到写入请求

我有一个 iOS 应用程序,它设置为CBPeripheralManager具有多个特征的外围设备和服务。在用户打开控制中心并关闭和打开蓝牙后,我试图实现重新连接。看起来我的服务可以正确恢复广告,但我没有收到任何写请求回调。我期待‑peripheralManager:didReceiveWriteRequests:被调用,但是一旦重新打开蓝牙,它就永远不会发生。

在这种情况下,我们需要做些什么特别的事情吗?根据CBPeripheralManager文档,如果外围状态低于 PoweredOff,我们只需要显式重新启动广告。我看到它转到 PoweredOff,然后是 PoweredOn,如果我查询它,‑isAdvertising返回YES,并添加服务崩溃并出现异常,因为该服务已添加。

0 投票
1 回答
509 浏览

ios - CoreBluetooth `retrieveConnectedPeripheralsWithServices` 返回断开连接的外围设备

我想知道CBManager's的语义retrieveConnectedPeripheralsWithServices。每次我使用它时,我都会CBPeripheral用 state 返回实例CBPeripheralStateDisconnected

再次连接不是问题,但是这种方法不应该返回连接的外围设备吗?

0 投票
1 回答
732 浏览

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代码

提前致谢。