Android:每秒更新蓝牙rssi

时间:2013-04-27 12:45:21

标签: android bluetooth broadcastreceiver rssi

我正在尝试从检测到的设备显示蓝牙信号强度(rssi)evry second(Timer())但我无法多次调用onRecive()因为Receiver Lifecycle

我需要一种方法(想法)来刷新RSSI,或者其他一些方法来每秒测量一次信号? 如果连接设备会更容易吗?

App始终给出一个恒定值:

  

DeviceName 2b:3c:d5:6c:3x:0X 40 db

应用程序的一部分存储在Timer()方法中:

    BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
            // Add the name and address to an array adapter to show in a ListView

           msg = device.getName() + " " + device.getAddress() + " " +rssi+ " db";

        }

}};

1 个答案:

答案 0 :(得分:2)

您只能在设备发现扫描期间获取RSSI值。 (Bluetooth Discovery vs Connection

“如果连接设备会更容易吗?”因此与Android文档: “如果您已经与设备保持连接,那么执行发现可以显着减少连接可用的带宽,因此您不应该在连接时执行发现。”

你真的需要每1秒进行一次询问吗?会消耗很多电池......

由于您需要定期执行测量,为什么不使用AlarmManager或CountDownTimer?

在您的具体情况下,我相信您应该使用AlarmManager,因为它可以无限重复。例如,如果您希望每秒执行一次10秒钟,请使用CountDownTimer。