gpt4 book ai didi

iOS - CoreBluetooth didDiscoverPeripheral 仅调用一次

转载 作者:行者123 更新时间:2023-11-29 01:15:58 24 4
gpt4 key购买 nike

我实际上正在使用低功耗蓝牙制作一个应用程序。

到目前为止,我的应用程序获得了 3 个 View ,每个 View 都显示一些 BLE 信息。

当我的蓝牙协议(protocol)代码在第一个 View 中时,没有问题。但我决定创建一个类并将我的蓝牙代码放入其中,这样我就可以为我的另外 2 个 View 创建一个全局类。我用过:

self.bluetoothManager = [BluetoothManager getInstance];

BluetoothManager,是我的全局类。

问题是这样的:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

该方法不再循环,仅在开始时调用一次。我担心其他服务(例如discoverCharacteristics 或Notifications)也不会循环。

编辑:这就是我创建类(class)的方式

+(BluetoothManager *)getInstance {
@synchronized(self)
{
if(instance==nil)
{
instance= [[BluetoothManager alloc] init];
}
}
return instance;
}

- (id) init {
self.CentralManager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_main_queue()];
self.activePeripheral = [CBPeripheral alloc];
self.discoveredPeripherals = [NSMutableArray new];
self.resultValue = [[NSString alloc] init];
return self;
}

- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
if (central.state != CBCentralManagerStatePoweredOn) {
return;
}

if (central.state == CBCentralManagerStatePoweredOn) {
// Scan for devices
[self.CentralManager scanForPeripheralsWithServices:nil options:nil];
NSLog(@"Scanning started");
}
}

编辑 2:到目前为止,我没有发布所有类方法来获得正确的问题,但是 CBCentralManager 委托(delegate)中的每个方法都已在我的类中实现。

到目前为止,我认为我的问题与线程有关,因为唯一的区别是我的类不再在主队列中?我确实尝试了一些方法,但我对线程不满意,如果有人有解决方案或想法来解决这个问题,请提前致谢。

最佳答案

如果成功调用了 didDiscoverPeripheral:... 回调,这意味着您已正确执行所有操作。当您调用 scanForPeripheralsWithServices:options: 时,iOS 开始扫描周围环境以搜索 BLE 设备。它会这样做,直到您显式调用 stopScan 或禁用 BT 或终止您的 CBCentralManager 实例。有些外围设备会立即找到,有些则需要更多时间。每次发现设备时,都会调用 didDiscoverPeripheral: 回调。发生这种情况时,您有责任决定是否对它感兴趣、连接它并发现它的服务。

关于iOS - CoreBluetooth didDiscoverPeripheral 仅调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com