Как запустить разрешение местоположения через панель запуска и получить результат в виде составного экрана, а не активноAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как запустить разрешение местоположения через панель запуска и получить результат в виде составного экрана, а не активно

Сообщение Anonymous »

Я работаю над приложением 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»