java - 每次应用启动时,如何将计步器重置为 0?
问题描述
每次启动应用程序时,如何将计步器重置为 0?如果我关闭我的应用程序并重新启动它,计数器将从之前停止的位置继续。我希望它重新开始。每次我的应用程序启动时,我已经尝试将我的 stepped textview 设置为 0,但它并没有改变任何东西。
public class HomeActivity extends AppCompatActivity implements SensorEventListener {
private TextView stepsTakenTextView;
private TextView distanceTraveledTextView;
private SensorManager sensorManager;
private Boolean running = false;
private UserModel userModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
stepsTakenTextView = findViewById(R.id.stepsTakenTextView);
distanceTraveledTextView = findViewById(R.id.distanceTraveledTextView);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
running = true;
Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if(countSensor != null){
sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
}else{
Toast.makeText(this, "Sensor not found", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onPause() {
super.onPause();
running = false;
}
@Override
public void onSensorChanged(SensorEvent event) {
if(running){
float stepsTaken= event.values[0];
解决方案
传感器只会在设备重新启动时重新启动。
这种类型的传感器会返回用户在激活时自上次重新启动以来所采取的步数。该值作为浮点数返回(小数部分设置为零),并且仅在系统重新启动时重置为零...
相反,您可以执行以下操作:
- 启动应用程序后,立即保存传感器返回的第一个值。
- 每次传感器发出一个新值时,都要从中减去初始值。
推荐阅读
- spring-boot - 服务器无法响应同一会话的更多请求
- android - [Swagger][Android] 使用模型生成时的最佳实践
- hadoop - 有没有办法在使用 sqoop 将数据摄取到 hbase 之前处理 sql 表列中的数据
- r - 使用 if 语句出错
- timezone - Flutter 时区(作为 ZoneId)
- javascript - 在运行测试之前等待数据库连接 - 事件问题
- java - 使文本视图全局化
- c# - 获取在 Linq 运行时生成的列的值?
- r - 将列的特定行元素乘以同一数据框中的一组列中的每一列
- java - 当我在主键中共享列(但不仅限于)时如何映射 jpa 实体