Чтобы получить два поставщика местоположений в 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
}
}
};