Bonjour,
Je viens de faire un code qui permet de calculer par GPS la distance parcourue à pied ou en courant et je souhaiterai avoir votre avis sur le code et si pour vous il y aurai moyen de mieux écrire le code où si pour vous il est suffisamment claire, car je compte ajouter le calcul de la vitesse bref j'ai peur d'avoir un code de 1000 lignes rempli de if, if, if, if...
Voici le code
J'en viens donc à la communauté de Developpez.net pour avoir un avis éclairé.Code:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169 import android.Manifest; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Build; import android.support.annotation.RequiresApi; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements LocationListener { private LocationManager locationManager; private Location oldlocation; private Location newlocation; private int oldTimeStamp; private int newTimeStamp; private int differenceTimeStamp; private int limiteTimeStamp = 10; private int distance; private int step = 0; private int xp = 0; private TextView latitude; private TextView longitude; private TextView newlatitude; private TextView newlongitude; private TextView experience; @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { if (Build.VERSION.SDK_INT >= 23) { if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION) && shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION) == true) { } else { requestPermissions(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION } , 2); } } } latitude = (TextView) findViewById(R.id.latitude); longitude = (TextView) findViewById(R.id.longitude); newlatitude = (TextView) findViewById(R.id.newlatitude); newlongitude = (TextView) findViewById(R.id.newlongitude); experience = (TextView) findViewById(R.id.experience); } @Override public void onResume() { super.onResume(); //Obtention de la référence du service locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); //Si le GPS est disponible, on s'y abonne if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { abonnementGPS(); } } @Override public void onPause() { super.onPause(); } /** * Méthode permettant de s'abonner à la localisation par GPS. */ public void abonnementGPS() { //On s'abonne if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this); } /** * Méthode permettant de se désabonner de la localisation par GPS. */ public void desabonnementGPS() { //Si le GPS est disponible, on s'y abonne if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } locationManager.removeUpdates(this); } @Override public void onLocationChanged(final Location location) { newTimeStamp = (int) System.currentTimeMillis() / 1000; //Première étape on rempli les variable oldlocation et oldTimeStamp avec les valeurs par défaut if (step == 0) { oldlocation = location; oldTimeStamp = (int) System.currentTimeMillis() / 1000; step++; latitude.setText("" + oldlocation.getLatitude()); longitude.setText("" + oldlocation.getLongitude()); experience.setText("" + xp); } //Si les valeurs par défaut sont remplie on fait la différence avec les nouvelles valeurs else { newlocation = location; differenceTimeStamp = newTimeStamp - oldTimeStamp; oldTimeStamp = (int) System.currentTimeMillis() / 1000; //Si cela fait dix secondes ou plus que la position n'a pas été actualisée l'expérience est bloquée. //Exemple: Eviter qu'une personne prenne le train et fasse plusieurs if (differenceTimeStamp >= limiteTimeStamp) { Toast.makeText(this, "Problème GPS", Toast.LENGTH_LONG).show(); xp += 0; newlatitude.setText("" + newlocation.getLatitude()); newlongitude.setText("" + newlocation.getLongitude()); oldlocation = location; } else { distance = (int) oldlocation.distanceTo(newlocation); Toast.makeText(this, "+" + distance + " Points d'experience", Toast.LENGTH_LONG).show(); xp += distance; newlatitude.setText("" + newlocation.getLatitude()); newlongitude.setText("" + newlocation.getLongitude()); oldlocation = location; } } latitude.setText("" + oldlocation.getLatitude()); longitude.setText("" + oldlocation.getLongitude()); experience.setText("" + xp); } @Override public void onProviderDisabled(final String provider) { //Si le GPS est désactivé on se désabonne if("gps".equals(provider)) { desabonnementGPS(); } } @Override public void onProviderEnabled(final String provider) { //Si le GPS est activé on s'abonne if("gps".equals(provider)) { abonnementGPS(); } } @Override public void onStatusChanged(final String provider, final int status, final Bundle extras) { } }
Merci d'avance de votre aide ;)
Cordialement,