Поставщик местоположения Android: получение двух поставщиков местоположения с помощью API FusedLocationProviderClient и LocationManager

Чтобы получить два поставщика местоположений в Android, вы можете использовать следующие методы с примерами кода:

Метод 1: использование API FusedLocationProviderClient и LocationManager

// Initialize the FusedLocationProviderClient
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// Check if the device has location services enabled
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
// Get the location updates from the appropriate provider(s)
if (isGPSEnabled) {
    // Use GPS provider
    fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if (location != null) {
                    // GPS location obtained
                }
            }
        });
}
if (isNetworkEnabled) {
    // Use network provider
    fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if (location != null) {
                    // Network location obtained
                }
            }
        });
}

Метод 2. Использование API LocationServices

// Initialize the FusedLocationProviderClient
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// Request GPS location updates
fusedLocationClient.requestLocationUpdates(
    getLocationRequest(LocationManager.GPS_PROVIDER),
    locationCallback,
    null
);
// Request network location updates
fusedLocationClient.requestLocationUpdates(
    getLocationRequest(LocationManager.NETWORK_PROVIDER),
    locationCallback,
    null
);
// Define the LocationRequest
private LocationRequest getLocationRequest(String provider) {
    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(1000);
    locationRequest.setFastestInterval(500);
    locationRequest.setSmallestDisplacement(10);
    locationRequest.setNumUpdates(1);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setProvider(provider);
    return locationRequest;
}
// Define the LocationCallback
LocationCallback locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        // Location obtained
        Location location = locationResult.getLastLocation();
        if (location != null) {
            // Process the location data
        }
    }
};