parent
694cc2a2ce
commit
1148f91241
|
|
@ -1,21 +1,25 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
<!-- 读取相册权限-Android 12及以下版本的权限 -->
|
<!-- 读取相册权限-Android 12及以下版本的权限,如果你不需要特定相机功能,可以添加下面这行降低过滤限制 -->
|
||||||
<uses-feature
|
<uses-feature
|
||||||
android:name="android.hardware.camera"
|
android:name="android.hardware.camera"
|
||||||
android:required="false" />
|
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" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
<!-- 写入外部存储权限,用于保存拍照后的图片或者下载文件,主要兼容Android 13及以下版本 -->
|
||||||
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"
|
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
android:maxSdkVersion="32"
|
android:maxSdkVersion="32"
|
||||||
tools:ignore="ScopedStorage,SelectedPhotoAccess" />
|
tools:ignore="ScopedStorage" />
|
||||||
|
<!-- 读取外部存储权限,用于读取相册图片,主要兼容Android 13及以下版本 -->
|
||||||
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"
|
<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE"
|
||||||
android:maxSdkVersion="32"
|
android:maxSdkVersion="32" />
|
||||||
tools:ignore="SelectedPhotoAccess" />
|
<!-- 读取相册图片权限-Android 13及以上版本的权限,两种解决方案:1、使用Android 照片选择器 (Photo Picker)即:PickVisualMedia 2、使用READ_MEDIA_VISUAL_USER_SELECTED权限。这里选择第二种,因为需要自定义相册。 -->
|
||||||
<!-- 读取相册图片权限-Android 13及以上版本的权限 -->
|
|
||||||
<uses-permission android:name = "android.permission.READ_MEDIA_IMAGES"
|
<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" />
|
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<!--查看WIFI网络状态-->
|
<!--查看WIFI网络状态-->
|
||||||
|
|
@ -73,7 +77,8 @@
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
|
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:launchMode="singleTask" >
|
android:launchMode="singleTask"
|
||||||
|
tools:ignore="DiscouragedApi,LockedOrientationActivity">
|
||||||
<intent-filter tools:ignore="AppLinkUrlError">
|
<intent-filter tools:ignore="AppLinkUrlError">
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.img.rabbit.components
|
package com.img.rabbit.components
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
|
|
@ -55,11 +56,14 @@ import java.io.File
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import coil3.compose.AsyncImage
|
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 com.img.rabbit.R
|
||||||
import kotlin.collections.minus
|
import kotlin.collections.minus
|
||||||
import kotlin.let
|
import kotlin.let
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun ImagePicker(
|
fun ImagePicker(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
|
@ -73,6 +77,11 @@ fun ImagePicker(
|
||||||
onDeleteUpdated: (currentUri: Uri, uris: List<Uri>) -> Unit
|
onDeleteUpdated: (currentUri: Uri, uris: List<Uri>) -> Unit
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
|
val cameraPermissionState = rememberPermissionState(
|
||||||
|
Manifest.permission.CAMERA
|
||||||
|
)
|
||||||
|
|
||||||
// 添加临时文件管理
|
// 添加临时文件管理
|
||||||
val tempImageUri = remember { mutableStateOf<Uri?>(null) }
|
val tempImageUri = remember { mutableStateOf<Uri?>(null) }
|
||||||
|
|
||||||
|
|
@ -130,10 +139,14 @@ fun ImagePicker(
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(
|
TextButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
|
if (cameraPermissionState.status.isGranted) {
|
||||||
showChoiceDialog = false
|
showChoiceDialog = false
|
||||||
val uri = FileProvider.getUriForFile(context,"${context.packageName}.fileProvider",File.createTempFile("IMG_", ".jpg", context.externalCacheDir))
|
val uri = FileProvider.getUriForFile(context,"${context.packageName}.fileProvider",File.createTempFile("IMG_", ".jpg", context.externalCacheDir))
|
||||||
tempImageUri.value = uri
|
tempImageUri.value = uri
|
||||||
cameraLauncher.launch(uri)
|
cameraLauncher.launch(uri)
|
||||||
|
}else{
|
||||||
|
cameraPermissionState.launchPermissionRequest()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
) { Text(text = "拍照", fontSize = 14.sp) }
|
) { Text(text = "拍照", fontSize = 14.sp) }
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue