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

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

App 总是给出一个常量值:


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";

        }

}};

最佳答案

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

“如果设备连接起来会更容易吗?”相应地与 android 文档:
“如果您已经与设备建立了连接,那么执行发现会显着减少连接可用的带宽,因此您不应在连接时执行发现。”

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

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

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

关于Android:每秒更新一次蓝牙 rssi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16252242/

10-12 02:32