Reading RSSI value of connected Bluetooth Low Energy device in Android Studio

dorsef picture dorsef · Oct 22, 2015 · Viewed 15.3k times · Source

I am working on a BLE project in Android Studio and would like to read the RSSI value of a device which I have already connected to. So far I was able to discover new devices via LE Scan and get their RSSI from there. However, once I connect to a device I can no longer run a scan and get the RSSI.

This is the code for discovering new devices before connecting to one of them. Not sure how relevant it is to my question though:

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() {
                mLeDeviceListAdapter.addDevice(device, rssi);
                //mLeDeviceListAdapter.notifyDataSetChanged();
                try {
                    mLeDeviceListAdapter.notifyDataSetChanged();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
};

Thanks in advance

Answer

Nowa Concordia picture Nowa Concordia · Oct 27, 2015

You have to use the readRemoteRssi() Async Call and then get the RSSI value using the Callback. https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html#readRemoteRssi()

As detailed here, https://stackoverflow.com/a/20236561