JenuRudan
JenuRudan

Reputation: 545

LocationServices.FusedLocationApi.getLastLocation Always gets null

I'm trying to mark current user location in a maps activity but the call of LocationServices.FusedLocationApi.getLastLocation always returns null

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback,GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener {

private GoogleMap mMap;
private GoogleApiClient mGoogleApiClient=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // 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);

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

}


@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnected(Bundle bundle) {

}

@Override
protected void onStart() {
    if(mGoogleApiClient.isConnected())
        Toast.makeText(this,"Client Connect",Toast.LENGTH_SHORT).show();
    else
        mGoogleApiClient.connect();
    super.onStart();
}


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

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        LatLng myLocation = null;
        if(mLastLocation!=null) {
            myLocation = new LatLng(mLastLocation.getLatitude(),
                    mLastLocation.getLongitude());
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation,
                    mMap.getMaxZoomLevel() - 5));
        }
    } else {
        // Show rationale and request permission.
    }


}
 }

Also i have added the permission in manifest file

when checking for mGoogleApiClient for connectivity it's always not connected

Upvotes: 0

Views: 442

Answers (1)

InvertedNetwork
InvertedNetwork

Reputation: 200

You need to register a listener to the location events, and start listening for a short period of time to several locations received, and compare their accuracy , source, etc, to determine which is the best one, and use that one.

Read Location strategies google documentation, which is pretty useful and has code examples of what you need to do to get accurate locations.

Also add this permission to the manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Upvotes: 2

Related Questions