- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试按照有关此 page 的教程进行操作,用于列出 BLE 设备并与之通信。
与作者不同,我对制作 GUI 应用程序不感兴趣,宁愿让它基于控制台。
我制作了两个文件来测试蓝牙通信,main.swift 和 BluetoothWorker.swift。
主类如下所示:
import Foundation
var worker = BluetoothWorker();
worker.findStretchSensor();
while worker.foundAddresses.isEmpty {
print("### no devices found, sleeping");
sleep(5);
print("### done sleeping");
}
这是我的蓝牙类(class)的样子:
import Foundation
import CoreBluetooth;
class BluetoothWorker: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
var foundAddresses = [String]();
var manager = CBCentralManager();
var myPherif: CBPeripheral?;
func findStretchSensor() {
manager = CBCentralManager(delegate: self, queue: nil);
print("### we are in the find sensor");
if (myPherif != nil) {
print("### we are canceling");
manager.cancelPeripheralConnection(myPherif!);
}
print("### we are scanning for devices");
manager.scanForPeripherals(withServices: nil, options: nil);
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
print("### we are checking the state");
if (central.state != CBCentralManagerState.poweredOn) {
print("### bluetooth is not available");
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("we found a device");
if (peripheral.name != nil) {
let message: String = "found peripheral:: " + peripheral.name!;
foundAddresses.append(peripheral.name!);
print(message);
}
}
}
我的控制台输出如下所示:
### we are in the find sensor
### we are scanning for devices
### no devices found, sleeping
### done sleeping
### no devices found, sleeping
### done sleeping
### no devices found, sleeping
我一辈子都弄不明白为什么没有列出任何设备,以及为什么委托(delegate)方法没有执行。如果我下载这个例子library (这与我的一个蓝牙设备非常相似),我的设备被识别了。 (注意,这个库也是基于 GUI 的)
我是否遗漏了一些明显的东西?
最佳答案
我在这里看到的两件事:
worker.findStretchSensor()
。您必须等到 centralManagerDidUpdateState()
报告 central.state == CBCentralManagerState.poweredOn
,即:
func centralManagerDidUpdateState(_ central: CBCentralManager) {
print("### we are checking the state");
if (central.state == .poweredOn) {
findStretchSensor()
}
}
当您创建 CBCentralManager
时,您错误地假设 central.state
已经启动。事实并非如此。接收 .poweredOn
状态需要一段时间。
centralManagerDidUpdateState()
的任何调用的原因。您是否尝试过为中央管理器创建传递队列?即:
queue = ...
manager = CBCentralManager(delegate: self, queue: queue)
关于Swift:CBCentralManager 找不到任何设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43021570/
_manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; [NSThread sleepForTimeInterva
我想知道如何确定 CBCentralManager 正在扫描哪些外围设备而不使用其他变量,换句话说,仅来自 CBCentralManager 对象。 最佳答案 看起来像是 CBCentralManag
iOS CoreBluetooth 中是否有一种机制,以便在发现(但未连接)外围设备“丢失”时触发事件,即正在广播的外围设备不再广播。 最佳答案 您可以在 CBCentralManager 的 sca
我想停止,然后在 CBCentralManager 上重新开始扫描。我的问题是:我应该在调用 stopScanning() 后等待交易完成,还是立即调用 startScanning()? 我不知道下层
我正在从事一个包括 CoreBluetooth 在内的项目。我研究了该主题并在网上找到了一些教程。 现在我重新创建了其中的一些教程,并且在几乎所有方法中我都遇到了以下错误: Initializer f
我正在尝试通过附近的蓝牙设备进行连接。我能够发现但无法连接它们。 这个代表正在工作,但在发现我正在尝试连接其中一个外围设备之后 func centralManager(_ central: CBCen
我正在尝试按照有关此 page 的教程进行操作,用于列出 BLE 设备并与之通信。 与作者不同,我对制作 GUI 应用程序不感兴趣,宁愿让它基于控制台。 我制作了两个文件来测试蓝牙通信,main.sw
当我运行代码并打开/关闭 MacbookPro 上的蓝牙时,状态始终为 4,对应于 PoweredOff 状态。 import Cocoa import CoreBluetooth @NSApplic
我在我的Objective-c代码中第一次使用CoreBluetooth框架。 我的iPhone版本是iPhone-3GS。 运行代码时,输出为“平台或硬件不支持低功耗蓝牙”。 我看到了3GS规范
是多个 CBCentralManager支持的实例?如果是这样,它们是在哪个版本的 iOS 中开始支持的? 我找到了 multiple emails在 Apple 邮件列表中声明它们不是。但是,这不是
我正在尝试使用 Core Bluetooth 连接两部 iPhone。一个运行外围设备,另一个运行中央设备。看来这两个设备已连接。并且在典型的控制流中调用每个方法,直到 peripheralManag
我想检查我的 iPhone 连接到了哪些蓝牙设备。为此,我使用 CBCentralManager.retrieveConnectedPeripherals()像这样: let connectedPer
我正在开发一个测试 BTLE 应用程序。用户可以选择启动中央或外设模式。如果 2 个设备都处于事件状态并且在范围内,它们会立即检测、连接并传递数据,但是...... 如果设备 1 以中央模式启动然后置
当使用 CBCentralManager 恢复状态时,字典有时会包含扫描的外围设备的 UUID internal func centralManager(_ central: CBCentralMan
我已经使用 CBCentralManager 检测到外围设备, 我用过的代码是这样的, - (void)viewDidLoad { [super viewDidLoad]; // Do
它们有什么区别?我应该什么时候使用 CBCentral 什么时候使用 CBCentralManager? 据我了解,CBCentralManager 和 CBCentral 都用于管理连接,但 CBC
我正在尝试访问 macOS (2017 iMac) 上的蓝牙外围设备,但是 CBCentralManager 似乎从未进入 .poweredOn 状态。 import Cocoa import Cor
是否支持多个 CBCentralManager 实例?我可以在我的应用程序的两个不同 View Controller 中创建两个 CBCentralManager 实例,并且都连接到同一个外围设备吗?
初始化 CBCentralManager 实例(需要委托(delegate)并且通常指向所属类)的好方法是什么? 我可以将该属性声明为隐式展开的可选属性,但作为一般做法,这样做似乎不像 Swift,也
我有一台 Mac,使用 CoreBluetooth 作为 CBPeripheralManager 设置为蓝牙配件。 Mac 在一组特征 CBUUID 上做广告,一旦它有了订阅者,我就单击一个按钮,每半
我是一名优秀的程序员,十分优秀!