Я работаю над приложением Jetpack Compose, и мне нужно обработать разрешение настроек местоположения. Я хочу проверить, включены ли настройки местоположения устройства (например, GPS и высокая точность), и если нет, показать диалоговое окно разрешения, чтобы пользователь мог их включить.
Я не хочу не знаю как запустить через лаучер.
locationSettingsLauncher.launch(resolvable.resolution) //(need to get result in launcher)
//resolvable.startResolutionForResult(activity, LOCATION_SETTINGS_REQUEST) (it will work but i am not ready to get result in parent activity of compose screen)
val LOCATION_SETTINGS_REQUEST = 245
fun enableLoc(context: Context, locationSettingsLauncher: ActivityResultLauncher) {
val activity= context.findActivity()
// Create a LocationRequest object
val locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 30 * 1000L)
.setWaitForAccurateLocation(false)
.setMinUpdateIntervalMillis( 5 * 1000L )
.setMaxUpdateDelayMillis(100)
.build()
// Build LocationSettingsRequest
val builder = LocationSettingsRequest.Builder().apply {
addLocationRequest(locationRequest)
setAlwaysShow(true) // Always show the prompt if location is not enabled
}
// Check the location settings
val result = LocationServices.getSettingsClient(activity).checkLocationSettings(builder.build())
result.addOnCompleteListener { task ->
if(task.isSuccessful){
requestLocationUpdates()
}else{
// The task failed, handle the exception
try {
val exception = task.exception
if (exception is ResolvableApiException) {
// The exception is of type ResolvableApiException, so you need to resolve it
val resolvable = exception as ResolvableApiException
// Start resolution for result
locationSettingsLauncher.launch(resolvable.resolution)
//resolvable.startResolutionForResult(activity, LOCATION_SETTINGS_REQUEST)
} else {
// Handle other types of exceptions (e.g., network issues, internal errors)
Toast.makeText(activity, "Location settings could not be resolved.", Toast.LENGTH_LONG).show()
}
} catch (e: ClassCastException) {
// Catch any potential casting issues (though unlikely)
e.printStackTrace()
}
}
}
}
// Register for location settings resolution result
val locationSettingsLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) { result ->
// Handle result after location settings resolution
if (result.resultCode == Activity.RESULT_OK) {
locationViewModel.requestLocationUpdates()
// Location settings are now enabled, proceed with location updates
Toast.makeText(
context,
"Location settings enabled. Proceeding with location updates.",
Toast.LENGTH_LONG
).show()
// Continue with your location request logic
} else {
locationViewModel.removeLocationUpdates()
// User canceled or didn't enable location settings
Toast.makeText(
context,
"Location settings are required.",
Toast.LENGTH_LONG
).show()
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... composable