我正在尝试从检测到的设备显示蓝牙信号强度(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";
}
}};
答案 0 :(得分:2)
您只能在设备发现扫描期间获取RSSI值。 (Bluetooth Discovery vs Connection)
“如果连接设备会更容易吗?”因此与Android文档: “如果您已经与设备保持连接,那么执行发现可以显着减少连接可用的带宽,因此您不应该在连接时执行发现。”
你真的需要每1秒进行一次询问吗?会消耗很多电池......
由于您需要定期执行测量,为什么不使用AlarmManager或CountDownTimer?
在您的具体情况下,我相信您应该使用AlarmManager,因为它可以无限重复。例如,如果您希望每秒执行一次10秒钟,请使用CountDownTimer。