Я не могу открыть окно разрешений с помощью «requestPermissionLauncher.launch(permissions)»Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Я не могу открыть окно разрешений с помощью «requestPermissionLauncher.launch(permissions)»

Сообщение 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, и мой файл манифеста:























Подробнее здесь: https://stackoverflow.com/questions/789 ... auncher-la
Ответить

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

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

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

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

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