From d974ad35af0aa4585091303256dbe221fe04a1fb Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Sat, 30 Aug 2025 17:43:48 +0000 Subject: [PATCH] 超出父容器 --- libmvi/src/main/java/com/runt/open/mvi/base/BaseActivity.kt | 59 ++++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 38 insertions(+), 21 deletions(-) diff --git a/libmvi/src/main/java/com/runt/open/mvi/base/BaseActivity.kt b/libmvi/src/main/java/com/runt/open/mvi/base/BaseActivity.kt index ff9677e..066c538 100644 --- a/libmvi/src/main/java/com/runt/open/mvi/base/BaseActivity.kt +++ b/libmvi/src/main/java/com/runt/open/mvi/base/BaseActivity.kt @@ -32,6 +32,7 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.ColorRes +import androidx.annotation.StringDef import androidx.annotation.StringRes import androidx.core.content.ContextCompat import androidx.lifecycle.Observer @@ -66,6 +67,7 @@ private var requestFileResult:Observer<List<String>>? = null; private var fileLauncher : ActivityResultLauncher<Intent>? = null //选择文件 + private var multipleFileLauncher : ActivityResultLauncher<Array<String>>? = null //选择文件 private var filePermissionLauncher : ActivityResultLauncher<Intent>? = null //文件权限 private val fileUriList = mutableListOf<Uri>() @@ -137,6 +139,17 @@ Log.i(TAG,"filePermission ${result}") onRequestFileResult(); } + multipleFileLauncher = registerForActivityResult(ActivityResultContracts.OpenMultipleDocuments()) { uris -> + fileUriList.clear(); + fileUriList.addAll(uris); + Log.i(TAG,"multipleFileLauncher ${uris}") + if(fileUriList.size == 0){ + requestFileResult?.onChanged(ArrayList()) + }else{ + onRequestFileResult(); + } + } + //选择文件 fileLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult() , object : ActivityResultCallback<ActivityResult?> { override fun onActivityResult(result : ActivityResult?) { @@ -188,7 +201,11 @@ } } - fun requestFile(fileType :String,maxCount:Int = 1,fileResult:Observer<List<String>>){ + @Retention(AnnotationRetention.SOURCE) + @StringDef(Manifest.permission.READ_MEDIA_VIDEO, Manifest.permission.READ_MEDIA_AUDIO, Manifest.permission.READ_MEDIA_IMAGES) + annotation class ManifestType + + fun requestFile(@ManifestType fileType :String,maxCount:Int = 1,fileResult:Observer<List<String>>){ requestFileResult = fileResult; var permissions = ""; //android 13 权限申请细化类型 @@ -206,33 +223,33 @@ requestPermissions(permissions , object :Observer<String>{ override fun onChanged(value : String) { if(!value.isEmpty()){ - var intent = Intent() - // intent.action = Intent.ACTION_PICK - // intent.action = Intent.ACTION_GET_CONTENT - - //intent.setType("image/*") when(fileType){ - Manifest.permission.READ_MEDIA_VIDEO ->{ + Manifest.permission.READ_MEDIA_VIDEO,Manifest.permission.READ_MEDIA_IMAGES ->{ + var intent = Intent() intent.action = MediaStore.ACTION_PICK_IMAGES - intent.setType("video/*") // 设置文件类型,可以更具体如"application/pdf" + var type = if(fileType == Manifest.permission.READ_MEDIA_VIDEO) "video/*" else "image/*" + intent.setType(type) // 设置文件类型,可以更具体如"application/pdf" + // 设置可多选 + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, maxCount > 1); + if(maxCount > 1){ + //设置最大数量 + intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxCount); + } + fileLauncher!!.launch(intent) } Manifest.permission.READ_MEDIA_AUDIO ->{ - intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) - intent.setType("audio/*") // 设置文件类型,可以更具体如"application/pdf" - } - Manifest.permission.READ_MEDIA_IMAGES ->{ - intent.action = MediaStore.ACTION_PICK_IMAGES - intent.setType("image/*") // 设置文件类型,可以更具体如"application/pdf" + var intent = Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI) + fileLauncher!!.launch(intent) + //multipleFileLauncher!!.launch(arrayOf("audio/*" + // "audio/mp3", // MP3 + // "audio/m4a", // M4A + // "audio/aac", // AAC + // "audio/ogg", // OGG + // "audio/wav" // WAV + // )) } else -> {} } - // 设置可多选 - intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, maxCount > 1); - if(maxCount > 1){ - //设置最大数量 - intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxCount); - } - fileLauncher!!.launch(intent) }else{ requestFileResult?.onChanged(ArrayList()) } -- Gitblit v1.9.1