Home Articles

尝试识别和范围(使用BLE)iPhone在后台传输作为外围设备* .

Asked
Viewed 485 times
1

当在iOS8上运行的应用程序背景化时,所有可识别的唯一身份信息似乎都会从蓝牙广告包中清除 . peripheral.name,peripheral.identifier等等 . 一旦应用程序背景,它就会消失 .

我发现的唯一解决方法 - 识别和排列多个蓝牙发射应用程序 - 是扫描并连接一组已知设备(iPhone) .

我的应用程序作为外围设备进行传输,其服务具有其值为唯一标识符的特征 . 这有效 .

我跌倒的地方是,一旦我阅读了特征(并确定了设备),我需要对其进行测距 . 在委托调用did得到RSSI时,我得到了一个外围对象,但是由于委托模式的异步性质,我不知道哪些发现的外设我得到了RSSI信号 . 即使连接后,外围设备似乎仍然是匿名的!

  • (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)特征错误:(NSError *)error {if(error == nil){NSString * valueString = [[NSString alloc] initWithData:characteristic.value encoding :NSUTF8StringEncoding]; NSLog(@“新值=%@”,valueString); peripheral.delegate = self; [外围读RSSI];外设:(CBPeripheral *)外设didReadRSSI:(NSNumber *)RSSI错误:(NSError *)错误{NSLog(@“在didReadRSSI中获得RSSI更新:%4.1f”,[RSSI doubleValue]); //但是我们回来了哪个外围设备(和相关的id)? }

这可能是Apple规范的限制,也可能是我的预期错误 . 许多外围设备的核心,与一对一的原始蓝牙架构不同 .

有什么想法,我如何识别和应用广播作为外围设备,同时背景?非常感谢,如果是这样!

1 Answer

  • 0

    CBPeripheral对象本身应该是唯一的 . 您可以保留已发现/已连接外围设备的字典以及特征中的自定义标识符 . 调用didReadRSSI委托时,您可以检查“已知”设备集合以识别特定设备 .

Related