J'ai un problème avec mon application sur Android. J'utilise cette classe:Comment puis-je obtenir l'emplacement actuel
package com.example.seadog.gps;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import org.json.JSONObject;
public class GPSTracker extends Service implements LocationListener {
private Context mContext;
public GPSTracker() {
}
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
boolean canGetLocation = false;
Location location;
double latitude;
double longitude;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
private static final long MIN_TIME_BW_UPDATES = 5000;
protected LocationManager locationManager;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
public void stopUsingGPS(){
if(locationManager != null){
locationManager.removeUpdates(GPSTracker.this);
}
}
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
return latitude;
}
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
return longitude;
}
public boolean canGetLocation() {
return this.canGetLocation;
}
public void showSettingsAlert() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
alertDialog.setTitle("GPS jest wyłączony");
alertDialog.setMessage("Do używania tej aplikacji wymagany jest GPS. W tym celu przejdź do ustawień, włącz GPS a następnie uruchom ponownie.");
alertDialog.setPositiveButton("Ustawienia", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
System.exit(0);
}
});
alertDialog.setNegativeButton("Anuluj", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
System.exit(0);
}
});
alertDialog.show();
}
@Override
public void onLocationChanged(Location location) {
int ID = GlobalConfig.ID;
int Random = GlobalConfig.Random;
double latitude = location.getLatitude();
double longitude = location.getLongitude();
try {
JSONObject json = new JSONObject();
json.put("ID", ID);
json.put("Random", Random);
json.put("latitude", latitude);
json.put("longitude", longitude);
GlobalConfig config = new GlobalConfig();
config.set(json);
//config.i(0);
} catch(Exception e){
e.printStackTrace();
}
}
@Override
public void onProviderDisabled(String provider) {
System.exit(0);
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
Cette classe est prise d'Internet. J'ai ajouté le code propre dans OnChangedLocation. Lorsque les coordonnées changent, créez un JSONObject avec la nouvelle latitude et la nouvelle longitude dans la classe GlobalConfig. Dans une autre classe, il existe un service qui envoie des données au serveur toutes les 5 secondes en arrière-plan. Mon problème est que la latitude et la longitude ne sont pas correctes. Parfois, la valeur obtenue est juste et l'autre fois non. L'emplacement reste le même pendant environ 10 ou quelques minutes et après un certain temps, la valeur correcte est affichée. Mon application fonctionne en arrière-plan. Sur le navigateur j'ai eu un aperçu sur google map et mon marqueur saute sur la carte. Je l'ai testé en conduisant une voiture.
Quelque chose ne va pas. Je voudrais obtenir la latitude et la longitude correctes. Aidez-moi!
Ce type de question déjà posée –
Vous devriez utiliser la fonction de recherche et regarder le manuel de Google [API Guides] (http://developer.android.com/guide/topics/location/strategies.html) –
Possible dupliquer de [Obtenir la position d'un téléphone Android en utilisant le GPS] (http://stackoverflow.com/questions/2651499/getting-the-position-of-an-android-phone-by-using-gps) –