According to this the flag Settings.Secure.LOCATION_MODE
has been depreacted in API 28. Is there an alternative way to write this setting? (I'm not interested in reading this value, which can be done via LocationManager
)
The following works on my android pie device:
Settings.Secure.putInt(contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF)
Settings.Secure.putInt(contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY)
Is it possible to get this exact same result when targetting > API 28 devices?.
I use this method to check if location service enabled or not
public static Boolean isLocationEnabled(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// This is new method provided in API 28
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
return lm.isLocationEnabled();
} else {
// This is Deprecated in API 28
int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
Settings.Secure.LOCATION_MODE_OFF);
return (mode != Settings.Secure.LOCATION_MODE_OFF);
}
}
Edit : I misinterpreted the question here's how i do it to change location settings
/**
* The desired interval for location updates. Inexact. Updates may be more or less frequent.
*/
private static final long UPDATE_INTERVAL_IN_MILLISECONDS = 5000;
/**
* The fastest rate for active location updates. Updates will never be more frequent
* than this value.
*/
private static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS =
UPDATE_INTERVAL_IN_MILLISECONDS / 2;
/**
* Small displacement for location updates
*/
private static final int SHORTEST_DISTANCE_IN_METER = 5;
ActivityResultLauncher<IntentSenderRequest> intentSenderForResult = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult()
, result -> {
if (result.getResultCode() == RESULT_OK) {
} else {
}
});
private LocationRequest createLocationRequest(){
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
locationRequest.setPriority(Priority.PRIORITY_HIGH_ACCURACY);
locationRequest.setSmallestDisplacement(SHORTEST_DISTANCE_IN_METER);
return locationRequest;
}
private void changeLocationSettings(){
//Ask to turn on location setting if not enabled
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
SettingsClient client = LocationServices.getSettingsClient(requireContext());
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
task.addOnSuccessListener(locationSettingsResponse -> {
// All location settings are satisfied. The client can initialize
// location requests here.
}).addOnFailureListener(e -> {
if (e instanceof ResolvableApiException) {
// Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(resolvable.getResolution()).build();
intentSenderForResult.launch(intentSenderRequest);
}
});
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With