- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图解决的基本问题如下。我有两台 iOS 设备,一台配置为中央设备,另一台配置为外围设备。我希望外围设备知道中央是否由于某种原因离开或变得不活动(比如运行中央的设备已关闭)。
在正常情况下,我将其设置为当中央靠近外围设备时,中央设备可以使用信标区域和测距通过特征写入通知外围设备(CLProximityImmediate) ,然后当它仍在范围内但距离很远时再次出现 (CLProximityFar)。这很好用。
但是,为了在中央设备从 CLProximityImmediate 状态变为某个未知状态时捕捉角落情况,我计划使用中央设备可以响应的外围设备的周期性指示。如果没有对指示的响应,则外设可以假定中央不再紧邻。但是,我找不到通知外设管理器指示失败的回调或委托(delegate)方法。
方法 updateValue:forCharacteristic:onSubscribedCentrals: 当底层传输队列已满时返回 NO——而不是因为中央没有响应,这是我理解的方式。
我在这里遗漏了什么明显的东西吗?外围管理器有没有办法告诉中央没有收到指示?或者在这种情况下,CoreBluetooth 中是否缺少回调?
感谢您的帮助!
最佳答案
有两个问题可以让外设知道位置管理器与CLBeacon失去联系。 :
iBeacon 是被动的,仅用于广播和传输设备。在 Apple 实现中,Core Location 框架没有与它们建立连接。因此外围更新者知道有人听过他们的广播。
CLBeacon
不会将底层 BTLE 外设公开为 CBPeripheral ,因此您将无法让 BTLE 外围设备知道您的位置监视器在范围内。
问题 #2 可以通过一种相当复杂的方式解决:
开始扫描 CBPeripherals
,其中 advertisementData
包含 proximityUUID
。
连接到那个 CBPeripheral
并得到特征值变化的通知。
经常更改外围设备上的特征值,因此当 Central 在超时期限后看不到更多通知时,表明外围设备超出范围。
如果您想让它适用于多个 iOS 设备,那么在广告和 iBeacon 之间切换并作为 GATT 外围设备工作会变得很复杂。
关于ios - 核心蓝牙 : How can the peripheral manager know that the central received an indication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130006/
我的任务很简单,就是编写连接 2 台 Android 设备并添加通信的应用程序。我发现了什么? Android BLE 不支持“外设”角色。 1) 那就是说我不能通过特殊的 UUID 将一个 andr
我想从蓝牙读取超过20字节的数据到树莓派3b+。我重写 DefaultDelegate 和 handleNotification(cHandle, data),并从 handleNotificatio
我正在创建一个 Xamarin.Ios 蓝牙应用程序,我的问题如下: 有没有办法一次性发现外设中所有服务的特征。我的意思是说如果我有三个服务(a、b、c)并且我调用 peripheral.discov
我只想获得附近蓝牙设备名称的列表。但是,peripheral.name 始终为 nil。广告包中的名称也始终为零。我附近有 7 台设备。我能看到他们,但看不到他们的名字。 我正在使用以下代码: [se
我一直在使用 CoreBlueTooth 框架在 BTLE iOS 设备之间进行通信,但我看到了一个奇怪的行为。这是我正在做的: iOS 设备 1(外围设备):公开可写特性。 iOS 设备 2(中央)
我使用下面的代码 [centralManager scanForPeripheralsWithServices:serviceUUIDArray options:[NSDiction
我的应用程序与外围设备的蓝牙通信有关。从发现到连接,每个功能都工作正常。在断开外围设备与应用程序的连接时,我编写了这样的代码 -(void) disconnect { if (_selecte
连接到广播我感兴趣的特定服务的 BLE 设备后,为了发现此服务,我正在调用: [self.peripheral discoverServices:@[[self.class serviceUUID]]
这是我的场景: 我连接了两个外围设备,将我的应用程序置于后台模式并开始使用外围设备,直到它们与我的应用程序失去连接。回来时,他们在触手可及时不会再次连接。 当我在应用程序在前台运行时执行相同的实验时,
我正在以前使用 MFi 设备的项目中使用 BLE。 目标是实现一种串行连接。 使用 EAaccessory,我有一个弹出框,要求连接设备并且工作正常。 使用 CB,我添加了一个 View ,我调用它来
当外围设备有配对信息时,如何强制 iPhone 与未配对的外围设备配对。 最佳答案 Core Bluetooth 中没有用于响应绑定(bind)过程的 API。 如果外围设备不需要加密,则当 iOS
我已经编写了一些 CoreBluetooth 代码,我可以发现设备,但我似乎无法发现我发现的外围设备的特征。谁有好的示例代码可供我用来验证我的代码? 这是我写的: #import "ViewContr
如果 iOS 应用程序已经与退出广告模式的 BLE 外围设备配对,它能否仅使用设备特定的 UUID、retrievePeripherals 进行连接,以及连接外设? 如果不是,是否只有一种模式可以让外
我刚开始使用 BLE,目前正在尝试制作一个可以连接到我的自定义 BLE 设备的简单应用程序。我能够发现 BLE 设备,但由于某种原因我无法连接到它。我尝试使用“浅蓝色”对其进行检查,它显示我的设备可连
我正尝试在 Central 中启动 BLE和 Peripheral模式。为了简单起见,现在使用硬编码变量。 我想我已经根据文档实现了所有内容。 我可以使用 Android 智能手机检查外设模式是否正常
在我们的系统中,我们有一个使用 BlueZ 5.50 的 BLE 外设(在本例中,在 RPi4 上运行)。 我们有一个 iOS 应用程序,它作为一个中心连接到这个外设。 这个连接可以在 btmon 中
我正在开发一个 iPhone 应用程序和一个 Mac 应用程序,它们通过蓝牙 LE 相互通信。 iPhone是中心,Mac是外围。我希望 iPhone 应用程序能够在重新启动后重新连接到 Mac 应用
在我目前正在从事的项目中,我正在使用单例类来处理所有与蓝牙相关的任务。它是 CBCentralManager对象处理与多个外围设备的连接。当CBPeripherals被发现,我让用户选择外围设备并连接
我正在开发 BLE 应用程序。我已经完成了在移动应用程序(CENTRAL - BluetoothGattClient)和外围设备(GATT SERVER)之间建立通信,尽管不是很顺利。 PERIPHE
开发 corebluetooth 应用程序并在与外围设备通信等几个方面感到困惑。为了从中检索信息,我对编写要观看的命令感到困惑。请在下面找到我的代码 int sendcommand[6]; s
我是一名优秀的程序员,十分优秀!