How to continuously get RSSI without connecting to the BLE device?

柔情痞子 提交于 2019-11-30 06:38:30

问题


My application needs to constantly get RSSI value of a bluetooth device to make some distance-rssi approximation, without connecting. However, callback method of the BluetoothAdapter gets the RSSI only once when the device scanned.

// Device scan callback
private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
        runOnUiThread(new Runnable() {
            public void run() {
                ...
            }
        });     
    }   
};

As a solution, I created two Runnable objects. One is for starting, other is for stopping scan process. These two objects call each other continuously until I get my desired RSSI value. After that my Handler removes them from message queue.

private Runnable startScan = new Runnable() {       
    @Override
    public void run() {
        bluetoothAdapter.startLeScan(leScanCallback);
        scanHandler.postDelayed(stopScan, SCAN_INTERVAL);
    }               
};

private Runnable stopScan = new Runnable() {        
    @Override
    public void run() {         
        bluetoothAdapter.stopLeScan(leScanCallback);                                            
        scanHandler.postDelayed(startScan, STOP_INTERVAL);          
    }
};

This seems to be working but I want to know if there is more viable option to do this without connecting.


回答1:


If the ble beacon is advertising and not connectable, onLeScan is called continously. If the ble beacon is connectable, the feature depends on the device.



来源:https://stackoverflow.com/questions/20058450/how-to-continuously-get-rssi-without-connecting-to-the-ble-device

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!