android - 如何在 Android Studio 中每 x 秒获取一次心率?
问题描述
我想每隔 x 秒从心率传感器获取数据。我用 postDelayed() 进行了尝试,但这仅适用于每 x 秒读取一次数据,但传感器在那段时间内正在运行,并且电池电量消耗非常快。我正在尝试找到一种方法来启动传感器,获取数据并每隔 x 秒停止一次传感器。
这是我到目前为止所做的:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
checkHR = true;
handler.postDelayed(this, 10000);
}
}, 1);
public void onSensorChanged(SensorEvent event) {
if(checkHR == true){
if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
String msg = "" + (int)event.values[0];
heartRate = (int)event.values[0];
Log.d("Heart rate is:", msg);
checkHR = false;
}
}
解决方案
unregisterListener
在获得一些数据后,您是否尝试过onSensorChanged
?并在postDelayed
火灾时重新注册。也许这就是为什么传感器仍在工作(仍然注册传感器,即使是checkHR=false
)并耗尽电池电量的原因。你能展示你如何注册这个监听器吗?心脏监测器在 Android 设备中并不常见......
使用默认传感器实现(SensorManager
和SensorEventListener
),这是禁用传感器的唯一可能方法 - 实际上系统一直在处理传感器,并且仅在某些应用程序注册侦听器时传递数据。因此,当您取消注册您的侦听器并且没有其他应用程序注册类似的侦听器时,系统可能会默认禁用传感器,因为没有人向它请求数据......
推荐阅读
- javascript - 将 Javascript 正则表达式转换为 Typescript 正则表达式
- c++ - 由于 32 位/64 位不匹配,无法解析外部符号 _glfwInit
- java - 运行脚本作为带有调试的 Intellij 构建
- c# - Excel中的Epplus linq子网格
- c# - 在 C# 中使用 Serilog 滚动文件日志
- dll - Windows 事件日志:使用 EXE 作为 EventMessageFile 而不是 DLL
- unity3d - 如何将 .fbx 纹理完全导入 Unity
- ios - 在 AppDelegate 之外注册通知 (FCM)
- java - java.util 包中的堆栈类
- json - 打字稿 - 从 json 中删除空值