Разрешение Android 14 для «READ_MEDIA_VISUAL_USER_SELECTED»Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Разрешение Android 14 для «READ_MEDIA_VISUAL_USER_SELECTED»

Сообщение Anonymous »

Я хочу получить доступ к фотографиям и файлу для загрузки, но если в моем приложении я выберу опцию «Разрешить все», все работает нормально, но когда я выбираю «Разрешить ограниченный доступ», сообщение отображается как «Разрешение предоставлено» и снова запрашивает разрешение, а затем приложение аварийно завершает работу с сообщением «Воспроизведение мультимедиа продолжает останавливаться», когда вы снова выбираете «Разрешить ограниченный доступ».
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
@Composable
fun MyContent1(navController: NavController, leaveViewModel: LeaveViewModel) {
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
val empID = userViewModel.getSFCode()

//FOR PERMISSION
val launcherMultiplePermissions = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { mapResults ->
mapResults.forEach {
Log.d("Permissions", "Permission: ${it.key} Status: ${it.value}")
}
// check if any of the requested permissions is granted or not
if (mapResults.values.all { it }) {
Constant.showToast(context, "Permission Granted")
} else {
Constant.showToast(
context,
"Permission Denied, Please give the permission to access..!"
)
}
}

Column(
Modifier
.fillMaxSize()
.background(colorResource(id = R.color.backgroundColor))
.padding(start = 10.dp, end = 10.dp)
.verticalScroll(state = rememberScrollState()), // Add verticalScroll modifier
horizontalAlignment = Alignment.CenterHorizontally
) {
// Function to validate the selected file size
fun isFileSizeValid(context: Context, uri: Uri): Boolean {
val inputStream: InputStream? = context.contentResolver.openInputStream(uri)
inputStream?.use { stream ->
val fileSize = stream.available().toLong()
return fileSize
if (uri != null) {
val mimeType = contentResolver.getType(uri)
if (mimeType != null && (mimeType.startsWith("image/") || mimeType == "application/pdf")) {
// Check if the selected file size is valid
if (isFileSizeValid(context, uri)) {
selectedUri.value = uri // Handle the returned URI
leaveFileName.value = getFileName(uri, context)
leaveFilePath.value = leaveFileName.value
Log.d("Apply Leave New", "File size is valid. Proceed with processing.")
} else {
Constant.showToast(
context,
"File size exceeds the maximum allowed size."
)
Log.d("Apply Leave New", "File size exceeds the maximum allowed size.")
}
} else {
Constant.showToast(context, "Please select an image or PDF file")
}
}
}

Column(modifier = Modifier.padding(10.dp).weight(1f)) {
Button(
onClick = {
filePathClearance()

val granted = checkAndRequestStoragePermissions(
context = context,
launcher = launcherMultiplePermissions
)

Log.d("granted value", "$granted")

if (granted) {
getContent.launch("*/*")
}
},
modifier = Modifier.fillMaxSize(),
colors = ButtonDefaults.buttonColors(colorResource(id = R.color.themeColor))
) {
Text(
text = leaveFileName.value.take(13) + "...",
style = TextStyle(
fontFamily = poppins_font,
fontSize = 13.sp,
fontWeight = FontWeight(500),
color = colorResource(id = R.color.white)
),
modifier = Modifier.tooltipTrigger()
)
}
}
}
}

Чтобы проверить разрешения:
fun checkAndRequestStoragePermissions(
context: Context,
launcher: ManagedActivityResultLauncher,
): Boolean {
val accessStorage: Array = // Permission request logic
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) {
arrayOf(android.Manifest.permission.READ_MEDIA_IMAGES)
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
arrayOf(
android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED,
android.Manifest.permission.READ_MEDIA_IMAGES,
)//READ_MEDIA_VISUAL_USER_SELECTED
} else {
arrayOf(
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
)
}

val permissionsToRequest: MutableList = mutableListOf()

if (!checkInViewModel.arePermissionsGranted(context, accessStorage)) {
permissionsToRequest.addAll(accessStorage)
}

if (permissionsToRequest.isNotEmpty()) {
launcher.launch(permissionsToRequest.toTypedArray())
}

return permissionsToRequest.isEmpty()
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... r-selected
Ответить

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

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

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

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

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