rssi android距离,Android – 基于RSSI估计信标接近度/距离 – 蓝牙LE

我有一个简单的iOS应用程序,显示它使用“立即”,“附近”等表达式检测到的蓝牙LE信标的接近度,我需要在

Android上编写类似的东西.

我在Android developer遵循了这个教程,我可以列出检测到的设备,现在想估计距离/邻近程度 – 这是一个问题.根据this SO thread,这只是一些数学计算.但是,它们要求我提供一个txPower值.

根据this tutorial by Dave Smith(并与此Bluetooth SIG statement交叉参考),它应该被信标设备广播为类型为0x0A的“AD结构”.所以我做的是解析AD结构,并寻找与类型匹配的有效载荷.

问题:我有4个信标 – 2个估计和2个设计.估计不会播放txPower,appflares将其广播为0.

有没有什么我在这里错过? iOS应用程序似乎正在处理所有这些都没有任何问题,但使用iOS SDK它在幕后,所以我不知道如何产生完全相同或相似的行为.有什么办法可以解决我的问题吗?

如果你想看看我用来解析AD结构的代码,它取自上述Dave Smith的github,可以在here找到.我对该类的唯一改变是添加了以下方法:

public byte[] getData() {

return mData;

}

这就是我如何处理扫描的回调:

// Prepare the callback for BLE device scan

this.leScanCallback = new BluetoothAdapter.LeScanCallback() {

@Override

public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {

if (!deviceList.contains(device)) {

MyService.this.deviceList.add(device);

Log.e("Test", "Device: " + device.getName());

List adRecords = AdRecord.parseScanRecord(scanRecord);

for (AdRecord adRecord : adRecords) {

if (adRecord.getType() == AdRecord.TYPE_TRANSMITPOWER) {

Log.e("Test", "size of payload: " + adRecord.getData().length);

Log.e("Test", "payload: " + Byte.toString(adRecord.getData()[0]));

}

}

}

}

};

我在控制台看到的是:

04-01 11:33:35.864: E/Test(15061): Device: estimote

04-01 11:33:36.304: E/Test(15061): Device: estimote

04-01 11:33:36.475: E/Test(15061): Device: n86

04-01 11:33:36.475: E/Test(15061): size of payload: 1

04-01 11:33:36.475: E/Test(15061): payload: 0

04-01 11:33:36.525: E/Test(15061): Device: f79

04-01 11:33:36.525: E/Test(15061): size of payload: 1

04-01 11:33:36.525: E/Test(15061): payload: 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值