Я пытаюсь запросить разрешения, необходимые моему приложению, но не могу открыть окно разрешений.
Вот мой составной объект:
@Composable
fun IntroScreen(
introViewModel: IntroViewModel = hiltViewModel(),
navController: NavController
){
val requestPermissionLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissionsMap ->
permissionsMap.forEach { (permission, isGranted) ->
Log.i("tag", "Permission: $permission, Granted: $isGranted")
}
}
val permissions = introViewModel.permissions
val permissionsState by introViewModel.permissionsState.collectAsState()
Column(
modifier = Modifier
.fillMaxWidth(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
){
Button(onClick = {
Log.i("tag", "Permissions state: ${permissionsState.joinToString(separator = ", ")}")
val allPermissionsGranted = permissionsState.all { it }
Log.i("tag", "All permissions granted: $allPermissionsGranted")
if (!allPermissionsGranted) {
// Request permissions
Log.i("tag", "Requesting permissions inside if statement: ${permissions.joinToString(", ")}")
requestPermissionLauncher.launch(permissions)
} else {
Log.i("tag", "All permissions already granted")
}
}, shape = Shapes.small) {
Text(text = "Ask Permissions")
}
}
Вот моя модель представления:
@HiltViewModel
class IntroViewModel @Inject constructor(private val context: Context, introInteractor:IntroInteractor):ViewModel(){
private val _permissionsState = MutableStateFlow(emptyList())
val permissionsState: StateFlow get() = _permissionsState
val permissions = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.POST_NOTIFICATIONS,
Manifest.permission.CAMERA,
Manifest.permission.INTERNET
)
init {
updatePermissionsState()
}
fun updatePermissionsState() {
val permissionsStateList = permissions.map { permission ->
ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
}
_permissionsState.value = permissionsStateList
}
}
Я сделал код максимально простым. И все зарегистрированные операторы возвращают ожидаемые результаты. Разрешения Интернета, Bluetooth и Bluetooth верны, а остальные ложны. Я попытался удалить те, которые соответствуют действительности, но окно не появилось.
Мой код достигает «requestPermissionLauncher.launch(permissions)», и параметры для launch() верны. Почему я не могу открыть окно?
Это результат журнала внутри моего оператора if перед моей программой запуска:
"Запрос разрешений внутри оператора if: android.permission. ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION, android.permission.ACCESS_BACKGROUND_LOCATION, android.permission.BLUETOOTH, android.permission.BLUETOOTH_ADMIN, android.permission.BLUETOOTH_SCAN, android.permission.BLUETOOTH_ADVERTISE, android.permission.POST_NOTIFICATIONS, android.permission.КАМЕРА, android.permission.INTERNET
".
Примечание: я тестирую на реальном Galaxy A14, и мой файл манифеста:
Подробнее здесь: https://stackoverflow.com/questions/789 ... auncher-la
Я не могу открыть окно разрешений с помощью «requestPermissionLauncher.launch(permissions)» ⇐ Android
Форум для тех, кто программирует под Android
1726677711
Anonymous
Я пытаюсь запросить разрешения, необходимые моему приложению, но не могу открыть окно разрешений.
Вот мой составной объект:
@Composable
fun IntroScreen(
introViewModel: IntroViewModel = hiltViewModel(),
navController: NavController
){
val requestPermissionLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissionsMap ->
permissionsMap.forEach { (permission, isGranted) ->
Log.i("tag", "Permission: $permission, Granted: $isGranted")
}
}
val permissions = introViewModel.permissions
val permissionsState by introViewModel.permissionsState.collectAsState()
Column(
modifier = Modifier
.fillMaxWidth(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
){
Button(onClick = {
Log.i("tag", "Permissions state: ${permissionsState.joinToString(separator = ", ")}")
val allPermissionsGranted = permissionsState.all { it }
Log.i("tag", "All permissions granted: $allPermissionsGranted")
if (!allPermissionsGranted) {
// Request permissions
Log.i("tag", "Requesting permissions inside if statement: ${permissions.joinToString(", ")}")
requestPermissionLauncher.launch(permissions)
} else {
Log.i("tag", "All permissions already granted")
}
}, shape = Shapes.small) {
Text(text = "Ask Permissions")
}
}
Вот моя модель представления:
@HiltViewModel
class IntroViewModel @Inject constructor(private val context: Context, introInteractor:IntroInteractor):ViewModel(){
private val _permissionsState = MutableStateFlow(emptyList())
val permissionsState: StateFlow get() = _permissionsState
val permissions = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.POST_NOTIFICATIONS,
Manifest.permission.CAMERA,
Manifest.permission.INTERNET
)
init {
updatePermissionsState()
}
fun updatePermissionsState() {
val permissionsStateList = permissions.map { permission ->
ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
}
_permissionsState.value = permissionsStateList
}
}
Я сделал код максимально простым. И все зарегистрированные операторы возвращают ожидаемые результаты. Разрешения Интернета, Bluetooth и Bluetooth верны, а остальные ложны. Я попытался удалить те, которые соответствуют действительности, но окно не появилось.
Мой код достигает «requestPermissionLauncher.launch(permissions)», и параметры для launch() верны. Почему я не могу открыть окно?
Это результат журнала внутри моего оператора if перед моей программой запуска:
"Запрос разрешений внутри оператора if: android.permission. ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION, android.permission.ACCESS_BACKGROUND_LOCATION, android.permission.BLUETOOTH, android.permission.BLUETOOTH_ADMIN, android.permission.BLUETOOTH_SCAN, android.permission.BLUETOOTH_ADVERTISE, android.permission.POST_NOTIFICATIONS, android.permission.КАМЕРА, android.permission.INTERNET
".
Примечание: я тестирую на реальном Galaxy A14, и мой файл манифеста:
Подробнее здесь: [url]https://stackoverflow.com/questions/78933629/i-cannot-get-the-permission-window-to-appear-using-requestpermissionlauncher-la[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия