parent
694cc2a2ce
commit
1148f91241
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue