Bonjour,

J'essaie de faire un podomètre au plus simple possible : un compteur de pas sans rien d'autre.
Pour utiliser les capteurs, les autorisations, les permissions etc.. aucun soucis, le problème et dans l'enregistrement des données.

Mon application utilise le Sensor.TYPE_STEP_COUNTER, et je récupère le nombre de pas directement depuis sensorEvent.values[0]. Le problème est que lorsque j'éteins mon téléphone, puis le rallume, cette valeur interne à Android est réinitialisée.
Cette valeur ne commence donc pas à 0 lors de l'installation de l'application, et se réinitialise à chaque redémarrage.
Si je fais une centaine de pas, avant d'installer mon application, la valeur de départ de mon podomètre sera donc de 100.

J'ai pas mal cherché et impossible d'arriver à quoique ce soit .. Quelqu'un aurait-t'il une idée ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
package fr.fracc.pedometer;
 
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
 
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity implements SensorEventListener {
 
    private SensorManager sensorManager = null;
    private boolean running = false;
    private long totalSteps = 0;
    private long previousTotalSteps = 0;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACTIVITY_RECOGNITION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, 101);
        }
 
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }
 
    @Override
    public void onResume() {
        super.onResume();
        running = true;
        Sensor stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
 
        if (stepSensor == null) {
            Toast.makeText(this, "No sensor detected on this device", Toast.LENGTH_SHORT).show();
        } else {
            sensorManager.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_UI);
        }
    }
 
    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        TextView tv_stepsTaken = findViewById(R.id.tv_stepsTaken);
        if (running) {
            totalSteps = (long) sensorEvent.values[0];
            long currentSteps = totalSteps - previousTotalSteps;
            tv_stepsTaken.setText("" + currentSteps);
        }
    }
 
    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
 
    }
}
voici mon code, en ayant essayé de faire au plus simple possible. Largement inspiré de code trouvé sur internet.

Je vous remercie d'avance !