0

我正在尝试开发一个能够检测蓝牙低功耗信号的应用程序,并且感谢适配器,将其显示在 Listview 中。目前工作得很好,但现在我想做的是 onLeScan 方法,这样当扫描找到一个设备时,它将设备和 rssi 值与列表中的所有元素进行比较。如果两个参数与列表中的一项相同,则不会调用适配器添加找到的设备。但是,当我编译代码时,它会检测到 BLE 信号,但 rssi 值不会改变。

这是我使用的代码:

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
    new BluetoothAdapter.LeScanCallback() {

        @Override
        public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    int size = leDeviceListAdapter.getCount();
                    for(int j = 0 ; j < size ; j++) {
                        BluetoothDevice devices = leDeviceListAdapter.getDevice(j);
                        Integer signal = leDeviceListAdapter.getRSSI(j);
                        if (devices!=device && signal!=rssi){
                            return;
                        }
                    }
                    leDeviceListAdapter.addDevice(device, rssi);
                    leDeviceListAdapter.notifyDataSetChanged();



                }
            });

        }

有谁知道如何解决这个问题?请帮忙!!!!如果有必要,我将把整个代码。

4

2 回答 2

0

rssi 值是信号强度。它不是 BluetoothDevice 的唯一标识符。您应该为此使用蓝牙地址。设备.getAddress();

于 2014-04-24T14:23:06.783 回答
0

在某些设备上调用 startLeScan 一次就足以保持更新。在其他设备上,您需要停止扫描并再次重新启动以获取更新。

在使用 Nexus 7 和 nexus 5 进行测试时,我注意到了这种差异。不知道哪个需要重新启动。

所以我的默认实现现在开始,等待 2 秒然后再次停止,依此类推。

于 2014-09-23T11:50:06.993 回答