3

我正在尝试从检测到的设备中显示蓝牙信号强度 (rssi) 每隔一秒 ( ),但由于Receiver LifecycleTimer(),我无法onRecive()多次调用。

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

App 总是给出一个常数值:

设备名称 2b:3c:d5:6c:3x:0X 40 分贝

部分应用程序存储在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";

        }

}};
4

1 回答 1

2

您只能在设备发现扫描期间获取 RSSI 值。(蓝牙发现与连接

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

您真的需要每 1 秒执行一次查询吗?会消耗很多电池...

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

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

于 2013-07-25T15:45:55.917 回答