问题标签 [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.
objective-c - 我应该完成所有 CBATTRequest 以写入特征还是仅写入数组中的第一个?
当我收到一个
目前尚不清楚我是否应该填写所有请求但只成功响应第一个请求,或者我是否应该只完成第一个写入请求并成功响应第一个请求。
当我收到委托方法时,我首先遵循 Apple 的说明
像对待单个请求一样对待多个请求 - 如果无法满足任何单个请求,则不应满足其中任何一个请求。相反,请立即调用 respondToRequest:withResult: 方法并提供指示失败原因的结果。
通过做
但是,一旦我通过了这个,并且知道我可以满足所有请求,就不清楚我是否应该真正遍历所有请求并为每个请求写入特征值,然后当我'我只响应第一个请求,或者我是否应该满足第一个请求并成功响应?
ios - 使用 CBPeripheralManager 发布多个独立的 BLE 服务
我有两种方法,每种方法都向外围管理器添加服务。当我收到didAddService
回调时,我将[manager startAdvertisingServices:]
方法与已添加的服务一起使用(因此用作CBAdvertisementDataServiceUUIDsKey
键值的数组中包含 1 个或 2 个服务 UUID。)
当我添加第二个服务并尝试宣传它们时,我总是收到错误Advertising has already started.
我尝试使用[manager stopAdvertising]
然后添加新服务,但是 stopAdvertising 方法是异步的,所以有时它仍然失败(在我startAdvertisingServices
再次调用时它还没有停止广告。)
我单独做广告/阅读/编写它们没有问题,如果我在调用 stopAdvertising 后等待,我可以开始一起做广告,但这似乎是一种黑客行为。
我能想到的安全方法是isAdvertising
在外设管理器的属性上进行 KVO,并持有每个服务是否应该做广告的标志,这样我就可以准确地知道广告何时停止并且我可以安全地重新开始。如果我开始和停止广告只是为了添加新服务,我也不确定这是否会对现场的 Centrals 产生影响。
使用外设管理器宣传多个服务的正确方法是什么?
ios - iOS 中的蓝牙 - 如果未找到外围设备,何时停止扫描
我在 iOS 中使用“scanForPeripheralsWithServices”并成功连接到我想要的设备。
但 Apple 的文档并未涵盖未找到有效外围设备的情况。确定没有可用外围设备、停止扫描并通知应用程序用户的最佳做法是什么?
ios - 未能在 iOS 中发现蓝牙 LE 服务广告
我创建了两个 iOS 应用程序;一个是广播服务的蓝牙 LE 外围设备,另一个是扫描广告服务的蓝牙 LE 中心。外围设备在我的 iPhone5s 上运行,中央设备在我的 iPad Mini 上运行。我最初将中央设置为扫描特定的广告服务,但后来将其更改为侦听任何服务。在任何一种情况下,作为中心的 iPad Mini 应用程序都不会检测到任何广告服务。我不确定这是我设置外围管理器进行广告的方式有问题,还是我设置中央管理器进行扫描的方式有问题,或者是设备配置问题。请提供我可以执行的建议或测试以使其正常工作。
以下是 iPhone5s 应用作为外设的相关代码:
这里是必要的委托方法。注意:委托方法 peripheralManagerDidUpdateState 触发并指示“CoreBluetooth BLE 硬件已开启并准备就绪”(中央侧也是如此)。委托方法 peripheralManager:didAddService:error 触发没有错误(见下面的输出)。并且委托方法 peripheralManagerDidStartAdvertising:error 触发没有错误)。这是从 didAddService 打印的服务信息:
CBPeripheralManager 委托方法(对不起所有代码,只是想完整。):
以下是在 iPad Mini 上运行的相关中心代码:
这是中央委托方法之一。除了 centralManagerDidUpdateState:,没有任何委托方法触发。
最后一点,我质疑 BLE 是否可以在我的设备上运行。我在 iPhone 和 iPad Mini 上加载了几个不同的 iBeacon 应用程序,看看我是否可以让这两个设备识别 iBeacon(一个发送,一个接收),但他们也没有发现 iBeacon。我也试过两部 iPhone。我也关闭了蓝牙然后打开。我还尝试关闭/打开设备电源。两个设备都在前台运行。仍然没有运气。请帮忙。
bluetooth-lowenergy - 从外围设备收到错误:didUpdateNotificationStateForCharacteristic
我开发了一个蓝牙低功耗外围应用程序,它成功连接了第二个 BLE 中央应用程序。但是,我无法让中央应用程序订阅有关外围设备提供的服务特征之一的通知。在中央应用程序中,我有以下内容:
不幸的是,这失败了,并且在委托方法 peripheral:didUpdateNotificationStateForCharacteristic 收到了错误(错误类型为“未知”)。如果我在上面的代码(aChar)中打印特征对象,我会得到以下信息:
请注意,通知 = 否。如何设置外围设备以启用特性通知?
swift - 在 iOS 上以广告形式发送蓝牙 LE 数据
我的应用程序作为蓝牙 LE 外围设备运行,我试图在广告中仅发送几个字节的自定义数据。
但看起来 CBAdvertisementDataManufacturerDataKey 中的数据集正在被剥离,而不是通过无线电发送出去。我已经阅读了在 Apple 的文档和在线中可以找到的所有相关信息。共识似乎是核心蓝牙忽略数据,因为仅支持 CBAdvertisementDataLocalNameKey 和 CBAdvertisementDataServiceUUIDsKey。上面的编译和运行良好,我可以在我的 BT 扫描仪应用程序中“我希望这能工作”,但我的两位自定义数据似乎不起作用。
有什么办法可以规避这个;CoreBluetooth 的任何可接受的替代品或我缺少的任何完全愚蠢的东西?
谢谢,
担
ios - 获取 BLE IOS 外设的 UUID,而不是服务 UUID
如何从外围设备端获取 UUID。不是广告包中的服务 UUID。
让我们从中央看它:
我需要的是 UUID 中的peripheral.identifier
,而不是包含在advertisementData
. 我可以从中心端获取它们,但我也需要从外围端获取它们。
ios - 如何使用 iPhone 应用程序向 BLE 设备发送 RGB 信号?
我们正在开发 iOS 应用程序,其中我们需要将 RGB 信号传递给 BLE 设备,并且基于 RGB 代码,设备 LED 会发光。我们正在使用iOS 应用程序中的蓝牙框架对象进行CBCentralManager
连接。CBPeripheral
我们正在设置特征和描述符 UUID,但仍然无法在 BLE 设备上发送信号。这是我们用来以十六进制字节格式传递 RGB 数据的代码。
我们做对了吗?发送数据或创建CBMutableCharacteristic
对象有什么问题吗?
bluetooth-lowenergy - CoreBluetooth - 将数据从 Central 写入 Peripheral
我参考了Apple为CoreBluetooth提供的示例应用程序,我成功地将数据从外围设备发送到中心,现在我需要将数据从中心写入外围设备。谷歌搜索后我发现它可以使用[_discoveredPeripheral writeValue:aData forCharacteristic:charc type:CBCharacteristicWriteWithResponse];
以下是我的 Central 实现,用于向外围设备发送消息:
当我调用此方法时,它无法写入数据,而是在控制台上看到 CoreBluetooth 警告,如下所示,
如果有人给出获取外设对象的最佳方法以及如何启动从中心到外设的数据发送,那就太好了。
编辑 我已经尝试过如何从 Objective-C 中的 UUID 中获取特征?
但是,在这种情况下,每当我尝试这样做时,我都无法循环服务它返回 services=nil。
bluetooth - 更改广告 iPhone 本地名称
使用 CoreBluetooth 框架是否可以更改在外围模式下广告的 iPhone 的外围名称?
例如:我希望外围 iPhone 广播一个自定义名称,并让另一台 iPhone 能够在中央模式扫描时读取该名称。
是否可以在外设广告 iPhone 上设置 GAP 名称?