问题标签 [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 回答
59 浏览

ios - CBCentralManager not calling didDiscoverPeripheral method Even Peripherals are active

When App opens the first time it is successfully detecting Peripherals and when I rescan it will detecting perfectly again. when I trying to connect to it. didDisconnectPeripheral is getting called that I understand but after that when I scan (without restart app) again didDiscover peripheral method not getting called, please let me know if anyone has any idea. do I have to do something after didDisconnectPeripheral called.

0 投票
0 回答
46 浏览

ios - CoreBluetooth 外围设备有没有办法拒绝订阅中央?

我有一个外围设备,我想保护它免受不需要的中央设备的访问。我还没有找到一种方法可以让我在中央订阅之前分析中央。

有没有一种方法可以做到这一点?

0 投票
0 回答
1188 浏览

ios - BLE IOS - CBPeripheralManager .updatevalue

我正在尝试在两台设备(两台 iPhone)之间发送数据(图像)。此代码用于广告的 CBPeripheralManager:

在 CBCentralManager 中,我使用didUpdateValueFor的是特性,它总是为零。

我究竟做错了什么?

0 投票
1 回答
510 浏览

ios - iOS 设备作为 iBeacon,为什么不工作?

我正在尝试制作一个使用 PeripheralManager 将 UUID 广播到 Central 的 iOS 应用程序。

我认为我的权限能力是有序的,但是当我用中央搜索它时我仍然找不到我的信标。

有什么我忘记了吗?

0 投票
0 回答
1511 浏览

swift - 数据更新时核心蓝牙外围设备不通知中央

我正在尝试通过 BLE 发送大数据包。为此,我创建了一个特征,该特征应在数据更改时通知中心。问题是显然外设在特征中堆积数据,但很明显一旦特征达到552字节它就不能储存更多的数据。

中央只接收 552 个字节并调用该函数didReceiveRead3 次(我一次传输 200 个字节,所以 3 次是 600 个字节,但只有 552 个字节使它成为低谷(我认为这是自 iOS 10 以来的限制))。这段代码也只打印Unhandled Characteristic UUID: 00000000-0000-0000-0000-000000000000一次并管理到setNotifyValue我的特性true。也didUpdateNotificationStateFor只叫一次。

我想知道为什么我的特点是堆积数据而不像我想的那样一次发送 200 个字节。

外围设备使用的代码是:(函数块只取数据和我们想要的块大小的 int 并返回块和数据减去所取的块)

对于中央,代码是:

随意询问更多代码

谢谢。

0 投票
1 回答
535 浏览

swift - 后台蓝牙(BLE)传输和扫描

当应用程序打开(前台)时,代码运行良好,但它不在后台运行。我启用了所有后台模式。我还使用实现的 .allowsBackgroundLocationUpdates 添加了后台位置更新。不知道从这里去哪里。代码如下:

}

先感谢您!!!

0 投票
0 回答
141 浏览

ios - 如何在 iOS 应用程序中优先考虑 BLE 操作/角色?

所以这很奇怪,但我们编写了一个监控 iOS 应用程序,它做了两件事:(1)充当从设备获取数据的 BLE 中心,以及(2)充当将数据传输到另一个观察者的 BLE 外围设备iOS 应用程序(我们也写过)。

监视器 iOS 应用程序从设备获取的数据比它传输到观察者 iOS 应用程序的数据重要得多,因为它必须以最小的延迟显示这些数据到屏幕上。事实上,我们有延迟检查,以确保我们在 200 毫秒左右的时间内接收和显示这些数据。将数据传输到观察者 BLE 应用程序是较低优先级的功能。但是,我们目前已经编写了它,以便从设备传入的每个数据点 (a) 更新屏幕,然后 (b) 写入本地特性(作为外围设备)以供观察 iOS 应用程序读取(作为中央)。

我们看到的是,当观察者 iOS 应用程序正在观察监视 iOS 应用程序时,有时监视 iOS 应用程序无法通过延迟检查。我们希望这种情况永远不会发生,我们希望只有在服务来自设备的传入数据后时间允许时才将数据传输给观察者。

有没有办法构造这个,以便监控 iOS 应用程序优先使用通过 BLE 的传入数据而不是通过 BLE 发送传出数据?或者有没有办法减少将 BLE 数据传输到中央的时间?也许我可以减少握手或减少发送端的要求。

欢迎任何想法。谢谢你。

0 投票
1 回答
860 浏览

ios - 如何在 CBPeripheralManager 处于活动状态时提高 CBCentralManager 的性能

我们创建了一个 iOS 应用程序,它实现了 CBCentralManager 以连接到我们创建的设备,该设备以 10Hz 传输数据。让这些数据快速通过并显示非常重要,因此我们围绕它建立了严格的延迟检查,如果错过太多点或者如果本地时钟检测到传入值变慢,我们将出现故障并中断连接。

客户要求我们实施第二个 iOS 应用程序来观察第一个应用程序。我们在原始应用程序中实现了一个 CBPeripheralManager,它可以做广告,可以连接,并会定期将其数据发布到一些传出特征。

我们发现,我们似乎无法将观察者 iOS 应用程序连接到原始 iOS 应用程序(即,原始 iOS 应用程序同时具有与设备的 CBCentral 连接和与活动观察者应用程序的 CBPeripheral 连接),没有触发我们对来自设备的传入数据的延迟检查。

我已经尝试了我能想到的一切,我为 CBPeripheralManager 和 CBCentralManager 使用了单独的队列,如下所示:

还,

  • 我记录了所有内容并加了时间戳,验证了我的代码都没有花费太长时间
  • 我将几乎所有的代码都从 BLE 处理程序中移出,以使它们非常轻巧且不会阻塞,
  • 我尝试了单独的队列(如上图所示),优先级较低
  • 我曾尝试将 CBPeripheralManager 数据速率降低到涓涓细流,每​​秒更新几次
  • 我尝试在建立 CBPeripheralManager 连接后暂停延迟检查三秒钟(这非常不理想),但问题似乎是随机出现的,而不仅仅是在连接之后。

似乎无论我尝试什么,在外围和中央连接都处于活动状态 4-5 分钟后(我们有一个循环,第二个应用程序每五秒重复连接和断开连接,以挑战设备连接)我的传入值更新自到中央的设备会减慢到大约 1/4 或 1/5 的速度,或者它们会停止整整一秒钟,然后几乎同时进行三到四个更新——这两者都会使我们的延迟检查失败。就像一些队列被填满并且性能趋于平缓,但正如我上面提到的,我认为我正在使用单独的队列。

我束手无策...是否有人对如何在 iOS 应用程序中优先考虑我的中央功能而不是外围功能有任何想法,或者以某种方式提高性能以防止这成为问题并使我的应用程序响应 10Hz来自设备的更新,即使被视为外围设备?

(编辑说我们正在反复连接/断开第二个应用程序......也许我在断开连接后没有清理干净,垃圾堆积起来并搞砸了BLE?这可以解释为什么问题似乎出现在4之后-5 分钟,无论第二次连接上的数据更新频率如何。)

0 投票
1 回答
161 浏览

ios - CBPeripheralManagerState 在 iOS 10+ 中已弃用。什么是替代方案?

BTLe文档说我应该在广播之前检查这个 Enum 值。

现在这已经贬值了,我最好的选择是什么?文档中没有替代品。

此外,同样的问题也适用于 CoreLocation,其中 iBeacon还要求我处理也使用此值的委托。

0 投票
0 回答
33 浏览

ios - 蓝牙设备集成到 iphone

我想通过扫描来获取蓝牙设备(如 iBeacon 但不是 iBeacon)的 UUID,但到目前为止还没有成功。

我试过CBPeripheral但它返回的 uuid 与实际值不匹配。

请建议我如何找到蓝牙设备的 UUID / MAC 地址。

我使用了以下代码: