onLeScan回调返回奇怪的正RSSI值

时间:2014-10-16 22:32:47

标签: android bluetooth bluetooth-lowenergy ibeacon-android android-ibeacon

在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%。 有什么东西我不见了吗? 感谢

2 个答案:

答案 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);会发生什么?你有没有看到积极的价值观?如果是这样,您是否可以共享摘录,以及您用来检测的设备型号和您正在检测的设备?