Java 即使在卸载后,我的步骤计数器也不会重置步骤
我使用Sensor.TYPE_STEP_计数器我知道它只在重新启动时重置。按下按钮时是否有其他方法将步骤重置为0 请查看我的代码,您将找到Runactivity.class 也许我可以用另一种方法来重置步骤。 每次都不用我重新启动Java 即使在卸载后,我的步骤计数器也不会重置步骤,java,android,android-sensors,sensormanager,Java,Android,Android Sensors,Sensormanager,我使用Sensor.TYPE_STEP_计数器我知道它只在重新启动时重置。按下按钮时是否有其他方法将步骤重置为0 请查看我的代码,您将找到Runactivity.class 也许我可以用另一种方法来重置步骤。 每次都不用我重新启动 public class RunActivity extends AppCompatActivity implements SensorEventListener{ private SensorManager sensorManager; priva
public class RunActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager sensorManager;
private TextView count;
boolean activityRunning;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_run);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Bundle bundle = getIntent().getExtras();
final String naam = bundle.getString("naam");
TextView NaamView = null;
Button stopRun = (Button) findViewById(R.id.stopRun);
count = (TextView) findViewById(R.id.countView);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
NaamView = (TextView) findViewById(R.id.naamRunText);
NaamView.setText(naam);
stopRun.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String countValue = count.getText().toString();
Log.d("countVAL", String.valueOf(countValue));
Intent myIntent = new Intent(RunActivity.this, HomeScreenActivity.class);
Bundle bundle = new Bundle();
bundle.putString("naam", naam);
sensorManager.flush(RunActivity.this);
sensorManager.unregisterListener(RunActivity.this);
count.setText("0");
onStop();
myIntent.putExtras(bundle);
startActivity(myIntent);
}
});
}
@Override
protected void onResume() {
super.onResume();
activityRunning = true;
Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if(countSensor != null){
sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);
}else{
Toast.makeText(this, "Jouw apparaat heeft geen sensor!", Toast.LENGTH_LONG) .show();
}
}
@Override
public void onSensorChanged(SensorEvent event) {
if(activityRunning){
count.setText(String.valueOf(event.values[0]));
}else{
event.values[0] = 0;
}
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
activityRunning = false;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
protected void onDestroy() {
super.onDestroy();
}
}
不,基于
此类型的传感器返回用户采取的步骤数
自上次激活时重新启动以来。该值作为一个值返回
浮点(小数部分设置为零)和仅重置为零
在系统重新启动时。
只有在系统重新启动时,当您单击应用程序中的重置按钮并将当前步骤计数保存到SharedReferences时,才可以重置该值。您需要一种方法来找出上次重新启动是什么时候,因为每次重新启动时保存的计数都会无效
private Integer stepsInSensor;
private Integer stepsAtReset;
void onCreate() {
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
stepsAtReset = prefs.getInt("stepsAtReset", 0);
}
public void onClick(View v) {
stepsAtReset = stepsInSensor;
if (stepsAtReset != null) {
SharedPreferences.Editor editor =
getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putInt("stepsAtReset", stepsAtReset);
editor.commit();
}
// you can now display 0:
count.setText(String.valueOf(0));
}
@Override
public void onSensorChanged(SensorEvent event) {
if(activityRunning){
stepsInSensor = Integer.valueOf(event.values[0]);
if (stepsAtReset = null) {
stepsAtReset = stepsInSensor;
}
int stepsSinceReset = stepsInSensor - stepsAtReset;
if (stepsSinceReset < 0) {
stepsAtReset = stepsInSensor;
stepsSinceReset = 0;
}
count.setText(String.valueOf(stepsSinceReset));
}else{
event.values[0] = 0;
}
}
专用整数阶跃传感器;
私有整数步进复位;
void onCreate(){
SharedReferences prefs=GetSharedReferences(我的首选项名称,模式\私有);
stepsAtReset=prefs.getInt(“stepsAtReset”,0);
}
公共void onClick(视图v){
stepsAtReset=STEPSIN传感器;
如果(stepsAtReset!=null){
SharedReferences.Editor=
GetSharedReferences(我的首选项名称,模式私有)。编辑();
编辑器.putInt(“stepsAtReset”,stepsAtReset);
commit();
}
//您现在可以显示0:
count.setText(String.valueOf(0));
}
@凌驾
传感器更改时的公共无效(传感器事件){
如果(活动运行){
stepsInSensor=Integer.valueOf(event.values[0]);
如果(stepsAtReset=null){
stepsAtReset=STEPSIN传感器;
}
int STEPSSINCESET=STEPSIN传感器-STEPSAT复位;
如果(步骤集<0){
stepsAtReset=STEPSIN传感器;
STEPSSINCESET=0;
}
count.setText(String.valueOf(stepsSinceReset));
}否则{
事件值[0]=0;
}
}
我在上面搜索,并尝试用不同的方法来做。没有任何帮助。
然后我找到了最简单的方法
在onSensorChanged()
中,只需添加计数器,这样当调用onSensorChanged()
时(每一步都会调用它),计数器只需对步骤进行计数,然后将此计数器显示到用户界面,而不是显示事件的值。值[0]
在重置按钮上,再次将计数器设为0。请输入您的代码。…@Gavriel我确实编辑了我的问题。您能给我举个例子吗?在我点击停止按钮后,我希望值为零。我完全按照你说的做了,在我点击停止按钮后,sep计数器仍然是一样的。我添加了一行以在onClick中显示“0”。但是,您在单击重置后是否尝试执行某些步骤?您好,该行不起作用,当我再次开始“运行”时,我会看到完整的步骤,如果我执行更多步骤,它会变高,当我单击停止并单击“再次运行”时,我会看到最高的步骤。所以使用这个代码基本上没有什么变化。我重新启动了手机并重新安装了应用程序。我们不知道是否有任何“运行”、“再次运行”按钮。如果你有你没有发布的代码,那么显然你需要理解答案并将其应用到代码的秘密部分。