Слушать изменение состояния местоположения, когда пользователь включает и выключает егоAndroid

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

Сообщение Anonymous »

Я видел много ответов, но ни один не работает. Последний, который у меня есть, использует трансляции, но он не работает. По сути, если местоположение отключено, я прошу пользователя сначала включить местоположение. Настройки устройства открываются, и пользователь включает определение местоположения, но если пользователь нажимает кнопку «Назад», результат всегда RESULT_CANCELLED.
Поэтому я подумал, что буду слушать изменения, когда пользователь переключает состояние, как показано на рисунке. видео, и как только оно включено, я продолжаю.
В настоящее время взаимодействие с пользователем ужасное, потому что единственный способ — перезапустить приложение.
манифест LocationBroadCast

Код: Выделить всё

class LocationBroadCast(private val onProviderStatusChanged: (Boolean) -> Unit): BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
try {
val locationManager = context.getSystemService(LOCATION_SERVICE) as LocationManager
val isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
android.util.Log.i("STATUS", "$isGPSEnabled") // THIS never logs
onProviderStatusChanged(isGPSEnabled)
} catch (ex: Exception) {
}
}
}
и мой составной

Код: Выделить всё

@Composable
private fun RequestEnableLocationDialog(
context: Context,
onRequestPermissionResult: (Boolean) -> Unit) {

val locationProviderChangedReceiver = LocationBroadCast(onRequestPermissionResult)

LocalBroadcastManager.getInstance(context)
.registerReceiver(locationProviderChangedReceiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))

DisposableEffect(Unit) {
onDispose {
LocalBroadcastManager.getInstance(context)
.unregisterReceiver(locationProviderChangedReceiver)
}
}

val openSettingsLauncher =
rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult(),
) { result ->

android.util.Log.i("result", "${result} ${result.resultCode}")
if (result.resultCode == RESULT_OK) {
// Check if location is enabled after user exits Settings
if (locationEnabled(context)) {
// Location is enabled, relaunch LocationPicker
onRequestPermissionResult(true)

}
}
}
AlertDialog(
onDismissRequest = { onRequestPermissionResult(false) },
title = { Text(text = "Location") },
text = { Text(text = "Description") },
confirmButton = {
TextButton(
onClick = {
openSettingsLauncher.launch(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
},
) {
Text(text = "Enable Location in Device Settings")
}
},
dismissButton = {
TextButton(
onClick = { onRequestPermissionResult(false) },
) {
Text(text = "Cancel")
}
},
)
}
я делаю что-то не так?

Подробнее здесь: https://stackoverflow.com/questions/781 ... on-and-off
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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