web-dev-qa-db-fra.com

Comment puis-je obtenir l'emplacement actuel? Studio Android

Je sais que cela a déjà été demandé, mais toutes les solutions disponibles exigent que j'utilise la méthode onLocationChanged() afin que je puisse utiliser les méthodes getLatitude() et getLongitude() pour obtenir les coordonnées. 

Mais onLocationChanged() sera appelé lorsque l'emplacement de mon périphérique sera modifié. Donc, pour obtenir ma position actuelle, je devrais déplacer mon appareil. 

Mais je veux obtenir les coordonnées actuelles sans avoir à déplacer mon appareil. Aussi, j'ai lu quelque part que je peux appeler la méthode onLocationChanged() manuellement et que je peux obtenir le dernier emplacement connu, mais encore une fois,

n'est-il pas possible que le dernier emplacement connu ne soit pas mon emplacement actuel? ou est-ce correct d'utiliser la dernière solution de localisation connue?

cela fait partie d'une classe que j'utilise pour implémenter LocationListener.

public class MyLocListener extends MapsActivity implements LocationListener {

    public void onLocationChanged(Location location)
    {
        if(location!=null)
        {
            MapsActivity.setLatitude(location.getLatitude());
            MapsActivity.setLongitude(location.getLongitude());
        }
    }}

c’est le remplacement de la fonction que j’utilise pour fournir les coordonnées de mon activité sur la carte. latitude et longitude sont deux variables de type double. Dans cette classe, les variables de latitude et de longitude sont initialisées à 0 et elles le restent car la fonction onLocationChanged() n'est appelée que lorsque ma position est modifiée. Par conséquent, je ne peux pas voir ma position actuelle sur la carte.

@Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;


        LocationManager myLocManager;

        myLocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        MyLocListener loc = new MyLocListener();
        if (ActivityCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        myLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc);

        LatLng sydney = new LatLng(latitude, longitude);

        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
5
Rehan Yousaf

Vous devriez utiliser GooglePlayServices

compile 'com.google.Android.gms:play-services-location:7.0.0'

Pour obtenir l'emplacement

 if (mGoogleApiClient == null) {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(LocationServices.API)
        .build();
}
if (mGoogleApiClient != null) {
    mGoogleApiClient.connect();
}

Après la connexion 

public class MainActivity extends ActionBarActivity implements
        ConnectionCallbacks, OnConnectionFailedListener {
    ...
    @Override
    public void onConnected(Bundle connectionHint) {
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation != null) {
            mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
            mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
        }
    }
}

Pour plus d'informations, consultez documentation .

2
thealeksandr

déplacez votre code à l'intérieur de l'emplacement modifié. L'obtention de la position étant asynchrone, votre latitude et votre longitude ne semblent jamais refléter optimiser les initialisations selon les besoins.

public class MyLocListener extends MapsActivity implements LocationListener {

public void onLocationChanged(Location location)
{
    if(location!=null)
    {
        MapsActivity.setLatitude(location.getLatitude());
        MapsActivity.setLongitude(location.getLongitude());

    LatLng sydney = new LatLng(location.getLatitude(), location.getLongitude);

    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

    }
}}
0
Kushan