在Android上使用蓝牙低功耗(BLE)扫描,我注意到有时RSSI值不正确。 我的代码只是调用了开始扫描功能:
mBluetoothAdapter.startLeScan(mLeScanCallback);
然后我在回调中读取结果并将结果保存在文件中:
private static BluetoothAdapter.LeScanCallback mLeScanCallback =
new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
String objScanRec = bytesToHex(scanRecord);
outStr = rssi + ";" + objScanRec + ";" + device.getName() + ";" + beaconLocation + ";\n";
try {
Raw_log.write(outStr);
Raw_log.flush();
} catch (IOException e) {
e.printStackTrace();
}
// }
}
};
问题是我读取正RSSI值,如果信标处于固定距离。 例如。我有距离手机(或智能手表)30厘米的灯塔我读取-45左右的值是真实的,但也是+80或+100左右的值(这是不现实的)这些值约为测量值的20%。 有什么东西我不见了吗? 感谢
答案 0 :(得分:1)
感谢您的帮助,我发现这是一个仅与Samsung Gear Live有关的问题。我想出了这个解决方案:
if(rssi > 0){
rssi = rssi - 128;
}
我已经测试了解决方案,它运行正常。 (例如,校正后获得的正值现在类似于负值,例如我读
-44 -45 -43 84 82
纠正之后:
-44 -45 -43 -44 -46
)
答案 1 :(得分:0)
这绝对不正常。我从未在回调中看到过rssi值为正。典型值为-30至-120。
我怀疑将数据写入日志或回读的方式有问题。如果你只是定期Log.d(TAG, "rssi="+rssi);
会发生什么?你有没有看到积极的价值观?如果是这样,您是否可以共享摘录,以及您用来检测的设备型号和您正在检测的设备?