gpt4 book ai didi

ios - Core Bluetooth 在后台广告和扫描

转载 作者:IT王子 更新时间:2023-10-29 07:49:45 32 4
gpt4 key购买 nike

我一直在尝试设置一个应用程序,使设备既可以扫描外围设备,又可以宣传为外围设备。目标是当两个设备通过蓝牙发现彼此靠近时在后台被唤醒。从 Apple 文档来看,您似乎应该能够在后台运行 BLE(启用蓝牙中央和蓝牙外设后台模式),并且我的应用程序在一台设备位于前台时工作。首先,我像这样宣传数据:

NSDictionary *advertisingData = @{CBAdvertisementDataLocalNameKey:@"my-peripheral",
CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:identifier]]};

// Start advertising over BLE
[peripheralManager startAdvertising:advertisingData];

然后我将设备设置为扫描数据:

NSArray *services = @[[CBUUID UUIDWithString:identifier]];

[centralManager scanForPeripheralsWithServices:services options:nil];

但是,当两者都进入后台时(设备必须被锁定),蓝牙无法发现和

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

永远不会在任一设备上调用。我怎样才能解决这个问题?谢谢

最佳答案

恐怕您正在尝试做的事情不会奏效。我试图实现同样的目标。

问题是前景和背景扫描的不同。当您在前台扫描设备时,您可以扫描任何东西。在后台,您必须指定您正在扫描的实际服务 UUID。好的,这实际上不是问题,因为您知道要查找的 UUID。

周边:作为外围设备的广播在前台和后台的工作方式又有所不同。在前台,它像任何普通的 BT 外围设备一样工作。在后台,它的工作空间非常有限,所以你的外围设备 UUID 被隐藏起来而不是广播。只有当中央设备(前台的 iPhone)请求它的信息时,它才会唤醒您的应用程序并显示它的 UUID。

所以两者相互抵消。由于您的后台扫描只能扫描具有特定 UUID 的设备,而您的后台外围设备无法公布其 UUID,因此它们无法看到对方。

您的 1 个设备(外围设备或中央设备)必须在前台才能工作。

这已在 Apple 蓝牙邮件列表中讨论过多次。

关于ios - Core Bluetooth 在后台广告和扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427230/

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