Complete Guide to Getting Current Location in Android: From GoogleMap.getMyLocation to FusedLocationProviderClient

Nov 23, 2025 · Programming · 13 views · 7.8

Keywords: Android Location Services | FusedLocationProviderClient | Google Maps API

Abstract: This article provides an in-depth exploration of complete solutions for obtaining user's current location in Android applications. It first analyzes common NullPointerException error causes, then details the evolution from traditional GoogleMap.getMyLocation method to modern FusedLocationProviderClient. The article includes complete code examples, permission configuration instructions, and best practice recommendations to help developers build stable and reliable location-aware applications.

Problem Background and Common Error Analysis

In Android development, obtaining user's current location is a common but error-prone task. Many developers encounter NullPointerException when using the googleMap.getMyLocation() method, which is typically caused by location data not being ready. Location acquisition in Google Maps Android API is an asynchronous process, and directly calling getMyLocation() may return null values.

Traditional Solutions and Their Limitations

Early solutions relied on GoogleMap.setOnMyLocationChangeListener, which obtained current location by listening to location change events. Here's a typical implementation:

private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        mMap.setMyLocationEnabled(true);
        if (mMap != null) {
            mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                @Override
                public void onMyLocationChange(Location arg0) {
                    mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("Current Location"));
                }
            });
        }
    }
}

However, this approach has significant limitations: location updates may not be timely, and the setOnMyLocationChangeListener method has been marked as deprecated.

Modern Solution: FusedLocationProviderClient

Google recommends using FusedLocationProviderClient as the standard way to obtain location information. This method combines multiple location sources including GPS, Wi-Fi, and cellular networks, providing more accurate and energy-efficient location services.

Initializing FusedLocationProviderClient

First, initialize the location client in the Activity's onCreate method:

private FusedLocationProviderClient fusedLocationClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

Getting Last Known Location

Use the getLastLocation() method to quickly obtain the device's last known location:

fusedLocationClient.getLastLocation()
    .addOnSuccessListener(this, new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
            if (location != null) {
                double latitude = location.getLatitude();
                double longitude = location.getLongitude();
                LatLng currentLatLng = new LatLng(latitude, longitude);
                
                // Display current location on map
                CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(currentLatLng)
                    .zoom(17)
                    .bearing(90)
                    .tilt(30)
                    .build();
                googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
            }
        }
    });

Permission Configuration Requirements

To use location services, corresponding permissions must be declared in the AndroidManifest.xml file:

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

Additionally, location permissions need to be checked and requested at runtime, especially in Android 6.0 (API level 23) and higher.

Location Services Enablement Check

Before obtaining location, check if the device's location services are enabled. Reference the approach in Google Maps app, providing clear guidance when users haven't enabled location services:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

if (!isGpsEnabled && !isNetworkEnabled) {
    // Prompt user to enable location services
    showLocationSettingsDialog();
}

Error Handling and Best Practices

In actual development, various exception scenarios should be fully considered:

Performance Optimization Recommendations

To provide better user experience and save device battery, it's recommended to:

Conclusion

From traditional GoogleMap.getMyLocation() to modern FusedLocationProviderClient, Android location service APIs have undergone significant evolution. Developers should adopt new APIs to build more stable and efficient location-aware applications. Proper permission management, error handling, and performance optimization are key factors in ensuring application success.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.