设置、情况的唯一性和前景中的成功扫描
我正试图从一个手机上获取蓝牙数据
CBPeripheral
装置这个特定设备的有趣之处在于,它发送的UUID直接将信息嵌入其中。(这似乎很奇怪,但我对BLE的了解还不够,不知道这是否是典型的。最终没有实际的联系——只有广告被发出。)
在前景中,我能够识别哪些读数是我的,因为
[peripheral name]
保持不变。所以我可以通过在
didDiscoverPeripheral
:
if ([[peripheral name] isEqualToString:@"UNIQUE_IDENTIFIER"]) {
NSLog(@"*** Got a reading ***");
}
这在前台工作得很好-我正在跑步
[self.centralManager scanForPeripheralsWithServices:nil options:nil];
在循环中(细节似乎无关紧要),代码能够打印出我期望它打印的所有读数。
后台扫描故障并尝试解决
我的应用程序信息。plist包含以下条目:
我还检查了XCode中“功能”选项卡中的相应字段(我认为是):
事实证明,这两样东西都没有用。
DidDiscoveryPeripheral
完全调用,直到我关闭应用程序时,它立即停止。
我在网上读到的另一件事是,当
scanForPeripheralsWithServices
使用调用
nil
但是,如果传递了一个非空的服务数组,那么它应该会成功。
我不确定这是否正确
. 问题是,我只能找到打电话的例子
扫描外围设备和服务
服务由其
UUID
s、 例如
NSArray *services = @[[CBUUID UUIDWithString: @"2456f1b9-26e2-8f83-e744-f34f01e9d701"]];
[self.centralManager scanForPeripheralsWithServices:services options:nil];
但不是他们的
name
所有物
问题是
所以我想我的问题是,在所有这些之后,是否会提供
名称
过滤器(而不是
UUID
s) 帮助应用程序在后台运行,如果是,我将如何在代码中编写它?如果没有,我会错过什么,以至于我的应用程序仍然只能在前台工作?
编辑:我以前想说“名称”时使用了术语“标识符”,所以我回去更改了它们。从文档中,这里是我想在后台扫描的名称值
https://developer.apple.com/documentation/corebluetooth/cbperipheral/1519029-name?language=objc