回调onReadRemoteRssi()永远不会被调用

时间:2018-11-24 16:47:20

标签: android bluetooth-lowenergy

通过从BLE设备读取RSSI,我在android上遇到了一些问题。 我的代码一直可以正常工作,现在我不得不修改Gatt连接功能以解决某些问题,现在我无法阅读RSSI。

首先,我将gatt功能从

mGatt = device.connectGatt(this, false, gattCallback);

mGatt = device.connectGatt(this, true, gattCallback,BluetoothDevice.TRANSPORT_LE);

所以每次我调用此功能

gatt.readRemoteRssi();

它永远不会像以前那样进入回调

public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status)

在我将新的参数值添加到connecGatt函数之前,读取RSSI一直有效。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我认为Android API可能有问题。首先,使用此代码可以工作10%的时间:

bluetoothDevice.connectGatt(this, true, new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        Log.d(TAG, "read rssi: " + gatt.readRemoteRssi());
        super.onConnectionStateChange(gatt, status, newState);
    }

    @Override
    public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
        Log.d(TAG, "rssi: " + rssi);
    }
});

但是我可以通过在此处添加延迟来改善它以使其70%的时间正常工作:

public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
    new Handler(Looper.getMainLooper()).postDelayed(
        () -> Log.d(TAG, "read rssi: " + gatt.readRemoteRssi()), 3000);
    super.onConnectionStateChange(gatt, status, newState);
}

但是,我注意到,如果信号强度保持不变,它将停止工作。我的意思是如果设备在附近并且rssi是-37,并且我多次调用此命令,则只会得到一次结果。但是,如果我将设备移回并调用它,则会立即获得结果(例如rssi -61),然后再次将其移近时,也会立即获得结果。在这种情况下,我的策略是不时读取并且仅在我真正获得结果时才更改值。