问题标签 [cbcentralmanager]
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 - CoreBluetooth - centralManagers 方法 didDiscoverPeripheral 在睡眠模式下变得最不频繁
我正在使用,当应用程序处于前台或后台或设备被锁定且设备屏幕仍处于打开状态时CoreBluetooth
,回调方法被频繁调用。didDiscoverPeripheral
但是一旦屏幕关闭/黑屏(睡眠模式),它的回调频率就会降低到几乎为零。
这可能是什么原因造成的?设备电池已满且蓝牙已打开。
请帮我解决这个问题。
谢谢。
ios - BLE 以编程方式发送密钥
当我将设备连接到外围设备时,他会问我一个密码(设备上会显示一个弹出窗口)。我想在连接期间以编程方式发送此密钥。
我正在使用 CBCentralManager 但我找不到发送它的方法。
有什么建议么?
ios - 有什么方法可以选择退出核心蓝牙状态恢复?
一旦 CBCentralManager 已经用恢复标识符实例化,有人知道如何选择退出 CB 状态恢复吗?
基本上我想根据某些条件再次关闭 CB 状态恢复(= 我不想一直使用状态恢复)。
我是否必须简单地释放 centralManager 并创建一个没有恢复标识符的新实例?
ios - 无法从 iOS 设备发现蓝牙外围设备或服务
我正在尝试使用 CoreBluetooth 框架扫描蓝牙设备。该设备是客户提供的原型。
我相信我的实现CBCentralManagerDelegate
是正确的,但我从未收到centralManager: didDiscoverPeripheral: advertisementData: RSSI:
回调。即使我注册了nil
应该为所有设备触发发现回调的服务 UUID,也没有任何反应。
我会考虑蓝牙设备是否有缺陷,除了这里的皱纹......当我在我的 iPad 上启动蓝牙调试应用程序 LightBlue 时,列出了原型设备以及一些服务。事实上,只要我使用该应用程序的“克隆”功能直接从 iPad 复制服务,我的委托回调就会触发。
我可以发布一些示例代码,但它确实是样板的东西(我相信)。蓝牙专家:我遇到的行为有什么明显的原因吗?
ios - 调用 discoverServices 后 CBPeripheral 连接不断断开
我正在尝试将 coreBluetooth 集成到我的应用程序中。这是我的代码:
我在 a 内调用 startScanning viewcontroller
,它总是在调用后进入(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
回调 [self.activePeripheral discoverServices:@[[CBUUID UUIDWithString:@"A65eBB2D-3D30-4981-9DB2-1996D88118A0"]]];
这是我经常看到的错误:
有人知道我错过了什么吗?
谢谢你的帮助。
ios - iOS - 使远程蓝牙 LE 设备订阅特性更改
我正在尝试在 BLE Central 作为客户端和服务器工作的 iOS 中重建一个 Android BLE 应用程序。
首先,本地设备正在扫描 BLE 设备,发现它并连接到它。(客户端角色)然后本地设备接管服务器角色,并在任何特性值发生更改时通知 BLE 设备。
在 Android 中它运行良好,因为我可以使用发现的 BluetoothDevice 并通过该BluetoothDevice.connectGatt
方法使其订阅我的特征更改。更改值时,我使用该notifyCharacteristicChanged
方法通知设备。
我想最重要的区别是,在 iOS 中,在设备发现之后,我只得到一个CBPeripheral
作为发现的设备,我不能将它用于任何基于客户端的功能,例如订阅服务器。至少,这是我目前无法弄清楚的。
我读到这个:iOs CoreBluetooth Central Server and Peripheral Client thread 和链接的邮件列表讨论:http ://lists.apple.com/archives/bluetooth-dev/2013/Nov/msg00047.html关于 iOS 设备充当客户端和服务器理论上它应该是可能的,我想知道是否有人找到了一种方法让发现的远程设备订阅我的特性更改。
ios - 从 Singleton 更改视图控制器中的 UILabel
我对 iOS 开发非常陌生,我正在努力制作一个连接到 BLE 设备的应用程序。由于我有许多视图控制器,我需要让外围设备始终连接到所有视图控制器中。
为了实现这一点,我在一个Singleton
. 这很好用,我从外围调用连接方法View Controller
并Singleton
连接到外围设备。
现在,问题是我的UILabel
视图控制器中有一个我想用Singleton
.
因此,我尝试从中获取实例View Controller
并直接更改标签,例如:
我还实例化了视图控制器类,例如:
然后我尝试在 main 中创建一个方法View Controller
:
并从以下位置调用它Singleton
:
哪个被正确调用(NSLog
已显示)但标签未更新。
我真的不知道如何View Controller
从Singleton
. 也不知道我尝试的方式是否正确。
任何建议或帮助将不胜感激。谢谢。
-----更新: -----
多亏了 Mundi 和 Nikita,我有了更好的方法来通过 NSNotification 实现我需要的东西。对于所有需要它的人,我就是这样做的:
在我View Controller
的viewDidLoad
电话中:
然后在同一个类中,我实现了通知观察者方法,如:
然后在我的Singleton
,当我需要我打电话:
当View Controller
收到来自Singleton
它的通知时,它会使用我在通知对象上添加的文本更新标签(在本例中为@“CONNECTED”)。
ios7 - 蓝牙中央管理器未连接到新服务
我正在尝试创建一个应用程序,其中两个不同的设备可以使用相同的 UIControlView 相互通信,以使用 iBeacon 来回发送通知并使用蓝牙来回发送数据。
我首先发送一个接近 iBeacon 询问该地区的人们是否想玩游戏。
如果收到通知的人点击“确定”按钮,他们会宣传蓝牙特征,其价值是原始人正在收听的唯一用户 ID 和服务,然后是 iBeacon 通知,提醒原始人他们想玩。
完成此操作后,应用程序停止外围广告并启动 centralManager 根据自己的用户 ID 和部分 UUID 扫描不同的服务 UUID。
我使用位置管理器来获取邀请通知。然后当点击“确定”按钮时,我使用
当发送者收到有人愿意玩的通知时,我将 peripheralManager 设置为 nil,这样我就可以将其设置为其他东西。
当原始人(发件人)点击“确定”按钮时,我重新分配外设管理器并开始根据第二个人用户 ID 和 UUID 的同一端广播服务 UUID。这是发送UUID。
这就是问题所在。我知道正在调用 peripheralManager 并正在发送数据,并且 CentralManager 正在通过日志进行连接。
这是发件人日志。
这是接收者日志。
如您所见, peripheralManager 正在做广告,而 centralManager 正在扫描。中央找到外围并连接但停止。通常外围设备会继续做广告,而中央设备必须在获取数据之前连接和断开连接几次。这就是我不知道如何开始工作的原因,因为我使用相同的代码来发送和接收这些数据,而且我使用的是从第二个人发送给第一个人的数据。
我已经尝试了几种不同的方法来使其正常工作,但不能。谁能启发我如何让它发挥作用?
ios - 更新外设的 CentralManagers 服务列表
我在 iOS 下遇到核心蓝牙问题。我正在编写一个 OTA 更新程序,并遇到了一个奇怪的问题。当我将设备切换到 OTAU 模式时,它会断开连接并在同一设备 UUID 下通告不同的服务,问题是,当我尝试从新连接的设备中查找服务时,我得到的是旧的服务列表,这些服务不再有效。问题的一个重要部分是 CBPeripheral.name 值是原始设备名称,但在返回到 didDiscoverPeripheral 的广告字典中,它是正确的新名称。
这是我看到的:
通常,对于程序的下一次干净运行,它会显示相反的方式,外设名称为 Xxxx_boot,广告名称为 Xxxx(广告始终正确)。
我不知道有什么方法可以清除保存在 CBCentralManager 中的外围信息,我什至尝试过创建 CentralManager 的新实例,但似乎没有任何效果。有任何想法吗?
tabs - Peripheral connection state goes to IDLE when switching tabs, but remains in first tab
So far I am able to connect to the peripheral fine and can send commands to it, but when I select a new tab the connection state goes to IDLE and I can't send anything from the next tab, but I can go back to the first tab and can send the commands just fine again. I am not the most experienced programmer, and I have been stuck here for a while now. So any help at all would be appreciated. When I created the tab bar controller I did not add any code to the .h or .m files... not sure if that could be a problem or not, I had a working first page then added the TBC and five other view controllers then connected them all together. I just want the connection to stay through tabs, as going back and forth between them will be happening often.
Thanks!