ios中的中怎样获得蓝牙设备的rssi

 我来答
骷髅头杰克猫猫
2016-05-14 · TA获得超过213个赞
知道小有建树答主
回答量:308
采纳率:0%
帮助的人:157万
展开全部
方法
ios的蓝牙开始都是通过系统的CBCentralManager来发现蓝牙设备和跟设备进行通信的。
如果想在scan过程中就能够获取到设备的RSSI值,需要在SCAN时设置选项。
如图所示:

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;
回调后,表示发现了设备。就可以通过然后连接设备;
如果设备连接成功,回调函数:
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;表示连接成功,然后就可以调用
- (void)discoverServices:(NSArray *)serviceUUIDs;来发现可用的service。
在设备连接成功后,可以调用ReadRSSI,来获取设备的信号值。RSSI的获得是通过
- (void)peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(NSError *)error 回调函数来实现的

当然,防丢器肯定是需要支持后台的,所有需要设置应用程序的后台模式,在这里,我们设置use bluetooth LE accessories,这样在后台就可以继续读取RSSI跟回调了。

在实际使用的过程当中,发现设置了后台模式后,读取RSSI的值持续时间不够长,读取一会就不继续读取了,后来各种测试发现,自己使用一个定时器持续读取蓝牙设备的battery,之所以读取battery,是因为设备的service中存在读取battery的serviceID。试验中,发现如果不定时读取该值,在后台运行的时候读取RSSI值就会中断
在测试过程中,根据RSSI值,得到设备与手机之间的距离公式大概如下:
powe(10, (abs(rssi) - 59) / (10 * 2.0)); 大概有这么一个关系,不是很准确。

设备有时候怎么也获取不到RSSI值,而且刚刚就能够获取得到,一会儿就之前就能够获取;经过各种排查问题,发现有可能外部蓝牙设备的问题,另外一个是自己手机蓝牙的问题,双方都重启一下就可以解决问题。
云里物里
2024-12-14 广告
蓝牙定位是iBeacon技术最常被应用的方向之一,基于蓝牙定位可以实现诸如寻路、寻车、向导等很多商业需求,也是基于iBeacon技术实现的。蓝牙定位又可以分为一维定位和二维定位,本文将介绍两种蓝牙定位技术的实现原理及实现方法。蓝牙定位一维定... 点击进入详情页
本回答由云里物里提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式