Obtenez de l'emplacement actuel dans onMapReady dans android à l'aide de google emplacements API

J'essaie d'afficher l'emplacement actuel de l'utilisateur sur la carte de google, à l'intérieur de mon application, mais je ne veux pas continuer à mettre à jour l'emplacement que l'utilisateur se déplace. Son emplacement initial doit être enregistré et montré jusqu'à ce qu'il ferme l'application. J'ai écrit le code suivant pour cette:

private GoogleMap mMap;
protected GoogleApiClient mGoogleApiClient;
Location mLastLocation;
double lat =0, lng=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    buildGoogleApiClient();

    //Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);


}

private void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}


/**
 * Manipulates the map once available.
 * This callback is triggered when the map is ready to be used.
 * This is where we can add markers or lines, add listeners or move the camera. In this case,
 * we just add a marker near Sydney, Australia.
 * If Google Play services is not installed on the device, the user will be prompted to install
 * it inside the SupportMapFragment. This method will only be triggered once the user has
 * installed Google Play services and returned to the app.
 */
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    //Add a marker in Sydney and move the camera
    mMap.setMyLocationEnabled(true);

    LatLng loc = new LatLng(lat, lng);
    mMap.addMarker(new MarkerOptions().position(loc).title("New Marker"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(loc));
}

@Override
public void onConnected(Bundle bundle) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if (mLastLocation != null) {
        lat = mLastLocation.getLatitude();
        lng = mLastLocation.getLongitude();
    }
}

@Override
protected void onStart() {
    super.onStart();

    mGoogleApiClient.connect();
}

Le problème avec ce code, c'est que je me fais de la lat, lng après la onMapReady fonction a déjà fini de s'exécuter. J'ai pensé que l'un des moyens pour corriger ce serait créer un AsyncTask pour s'assurer que l'emplacement des données récupérées avant de la carte. Cependant, je suis en train de mettre en œuvre ce de façon à ne pas utiliser AsyncTask.

OriginalL'auteur Ankush | 2016-04-16