1、梳理权限要求
This commit is contained in:
shenzuqiang 2026-03-16 10:11:59 +08:00
parent 694cc2a2ce
commit 1148f91241
2 changed files with 30 additions and 12 deletions

View File

@ -1,21 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 读取相册权限-Android 12及以下版本的权限 -->
<!-- 读取相册权限-Android 12及以下版本的权限,如果你不需要特定相机功能,可以添加下面这行降低过滤限制 -->
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<!-- 在Android14及以上版本读取SelectedPhotoAccess需要添加READ_MEDIA_VISUAL_USER_SELECTED权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<!--相机权限,用于打开相机和拍照:如用户反馈等-->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 写入外部存储权限用于保存拍照后的图片或者下载文件主要兼容Android 13及以下版本 -->
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
tools:ignore="ScopedStorage,SelectedPhotoAccess" />
tools:ignore="ScopedStorage" />
<!-- 读取外部存储权限用于读取相册图片主要兼容Android 13及以下版本 -->
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32"
tools:ignore="SelectedPhotoAccess" />
<!-- 读取相册图片权限-Android 13及以上版本的权限 -->
android:maxSdkVersion="32" />
<!-- 读取相册图片权限-Android 13及以上版本的权限两种解决方案1、使用Android 照片选择器 (Photo Picker)即PickVisualMedia 2、使用READ_MEDIA_VISUAL_USER_SELECTED权限。这里选择第二种因为需要自定义相册。 -->
<uses-permission android:name = "android.permission.READ_MEDIA_IMAGES"
tools:ignore="PhotoAndVideoPolicy,SelectedPhotoAccess" />
tools:ignore="PhotoAndVideoPolicy" />
<!--检测联网方式,在网络异常状态避免数据发送,节省流量和电量-->
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<!--查看WIFI网络状态-->
@ -73,7 +77,8 @@
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
android:exported="true"
android:launchMode="singleTask" >
android:launchMode="singleTask"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />

View File

@ -1,5 +1,6 @@
package com.img.rabbit.components
import android.Manifest
import android.annotation.SuppressLint
import android.net.Uri
import androidx.activity.compose.rememberLauncherForActivityResult
@ -55,11 +56,14 @@ import java.io.File
import androidx.compose.foundation.Image
import androidx.compose.ui.res.painterResource
import coil3.compose.AsyncImage
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import com.img.rabbit.R
import kotlin.collections.minus
import kotlin.let
@OptIn(ExperimentalMaterial3Api::class)
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class)
@Composable
fun ImagePicker(
modifier: Modifier = Modifier,
@ -73,6 +77,11 @@ fun ImagePicker(
onDeleteUpdated: (currentUri: Uri, uris: List<Uri>) -> Unit
) {
val context = LocalContext.current
val cameraPermissionState = rememberPermissionState(
Manifest.permission.CAMERA
)
// 添加临时文件管理
val tempImageUri = remember { mutableStateOf<Uri?>(null) }
@ -130,10 +139,14 @@ fun ImagePicker(
confirmButton = {
TextButton(
onClick = {
showChoiceDialog = false
val uri = FileProvider.getUriForFile(context,"${context.packageName}.fileProvider",File.createTempFile("IMG_", ".jpg", context.externalCacheDir))
tempImageUri.value = uri
cameraLauncher.launch(uri)
if (cameraPermissionState.status.isGranted) {
showChoiceDialog = false
val uri = FileProvider.getUriForFile(context,"${context.packageName}.fileProvider",File.createTempFile("IMG_", ".jpg", context.externalCacheDir))
tempImageUri.value = uri
cameraLauncher.launch(uri)
}else{
cameraPermissionState.launchPermissionRequest()
}
}
) { Text(text = "拍照", fontSize = 14.sp) }
},