我正在尝试从检测到的设备中每隔一秒( 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/