From dad2ded3e9e9d2edf55c7ce10e791588b526961f Mon Sep 17 00:00:00 2001
From: 18034727885 <973609879@qq.com>
Date: 星期四, 14 五月 2026 09:11:57 +0800
Subject: [PATCH] 优化升级相册选择逻辑 升级版本

---
 app/src/main/java/com/example/smart/image/ImageProvider.kt |  187 ++++++++++++++--------------------------------
 1 files changed, 58 insertions(+), 129 deletions(-)

diff --git a/app/src/main/java/com/example/smart/image/ImageProvider.kt b/app/src/main/java/com/example/smart/image/ImageProvider.kt
index 930d6c1..acec4c6 100644
--- a/app/src/main/java/com/example/smart/image/ImageProvider.kt
+++ b/app/src/main/java/com/example/smart/image/ImageProvider.kt
@@ -1,36 +1,31 @@
 package com.example.smart.image
 
 import FileUploader
-import android.R
 import android.app.Activity
-import android.content.Context
 import android.content.Intent
-import android.graphics.Color
 import android.net.Uri
 import android.os.Build
 import android.os.Environment
 import android.provider.Settings
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.FragmentActivity
-import com.donkingliang.imageselector.ImageSelectorActivity
-import com.donkingliang.imageselector.entry.RequestConfig
-import com.donkingliang.imageselector.utils.ImageSelector
 import com.example.basecore.util.FileTools
 import com.example.basecore.util.LogUtils
 import com.example.smart.bean.ImageRef
 import com.example.smart.widget.dialog.LoadingDialog
-import java.util.ArrayList
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.luck.picture.lib.style.PictureSelectorStyle
+import com.luck.picture.lib.style.SelectMainStyle
+import com.luck.picture.lib.style.TitleBarStyle
 
 
 class ImageProvider(val activity: Activity, val callback: IImageCallback) {
-
-    private val REQUEST_CODE: Int = 6666
-
     private var ossObjectName = ""
 
     private var maxCount = 1
     val loadingDialog: LoadingDialog = LoadingDialog(activity)
+
     /**
      * oss object name
      */
@@ -42,9 +37,9 @@
      * 检测android13 存储权限
      */
     private fun checkPer(): Boolean {
-         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 
-           return  Environment.isExternalStorageManager()
+            return Environment.isExternalStorageManager()
 //                 return ContextCompat.checkSelfPermission(
 //                 activity,
 //                 Manifest.permission.MANAGE_EXTERNAL_STORAGE
@@ -54,91 +49,63 @@
     }
 
     fun showImageSelect(maxCount: Int = 9) {
-//        .backResId(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_mtrl_am_alpha) // 标题
-//        val config = ISListConfig.Builder() // 是否多选, 默认true
-//            .multiSelect(false) // 是否记住上次选中记录, 仅当multiSelect为true的时候配置,默认为true
-//            .rememberSelected(false) // “确定”按钮背景色
-//            .btnBgColor(Color.GRAY) // “确定”按钮文字颜色
-//            .btnTextColor(Color.BLUE) // 使用沉浸式状态栏
-//            .statusBarColor(Color.parseColor("#3F51B5")) // 返回图标ResId
-//
-//            .title("图片") // 标题文字颜色
-//            .titleColor(Color.WHITE) // TitleBar背景色
-//            .titleBgColor(Color.parseColor("#3F51B5")) // 裁剪大小。needCrop为true的时候配置
-//            .cropSize(1, 1, 200, 200)
-//            .needCrop(true) // 第一个是否显示相机,默认true
-//            .needCamera(false) // 最大选择图片数量,默认9
-//            .maxNum(maxCount)
-//            .build()
-//
-//
-//// 跳转到图片选择器
-//        ISNav.getInstance().toListActivity(activity, config, REQUEST_CODE)
-
-
-
         if (!checkPer()) {
-
             val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
             intent.data = Uri.parse("package:" + activity.packageName)
             activity.startActivityForResult(intent, 0x00000012)
             return
         }
-
-
-        val config = RequestConfig()
-        config.useCamera = true
-        config.isSingle = false
-        config.maxSelectCount = maxCount
-        config.canPreview = true
-
         this.maxCount = maxCount
-        val intent = Intent(activity, ImageSelectorActivity::class.java)
-        intent.putExtra(ImageSelector.KEY_CONFIG, config)
-        if (activity is FragmentActivity) {
-            val register = activity.activityResultRegistry.register(
-                "101",
-                ActivityResultContracts.StartActivityForResult()
-            ) {
-                if (it == null) {
-                    return@register
+        //https://gitcode.com/gh_mirrors/pict/PictureSelector/?utm_source=gitcode_aigc_v1_t1&index=bottom&type=card&&uuid_tt_dd=10_37197039080-1778553766662-368769&isLogin=9&from_id=156450437&from_link=2b5eaab318b433d2570db6b0ce95c381
+        PictureSelector.create(activity)
+            .openGallery(SelectMimeType.ofImage())
+            .setImageEngine(GlideEngine.createGlideEngine())
+            .setCompressEngine(CompressEngine())
+            .setSandboxFileEngine(SandboxEngine())
+            .isPreviewImage(true)
+            .isDisplayCamera(true)
+            .setImageSpanCount(3)
+            .setSelectorUIStyle(PictureSelectorStyle().apply {//https://github.com/LuckSiege/PictureSelector/wiki/PictureSelector-3.0-%E4%B8%BB%E9%A2%98api%E8%AF%B4%E6%98%8E
+                titleBarStyle = TitleBarStyle().apply {
+                    isHideCancelButton = true
                 }
-                onActivityResult(REQUEST_CODE, it.resultCode, it.data)
-            }
-            register.launch(intent)
-        }
+                selectMainStyle = SelectMainStyle().apply {
+                    isCompleteSelectRelativeTop = true//完成按钮从底部放在右上角
+                    isPreviewSelectRelativeBottom = true//预览页选择按钮从顶部放在右下角
+                }
+            })
+            .setMaxSelectNum(maxCount)
+            .forResult(object : OnResultCallbackListener<LocalMedia?> {
+                override fun onResult(result: ArrayList<LocalMedia?>?) {
+                    if (result == null) {
+                        return
+                    }
+                    val filterNotNull = result.filterNotNull()
+                    if (filterNotNull.isEmpty()) {
+                        return
+                    }
+                    //获取选择器返回的数据
+                    val images = filterNotNull.mapNotNull { it.getAvailablePath() }
+                    LogUtils.e("images:$images")
+                    if (images.isEmpty()) {
+                        return
+                    }
+                    loadingDialog.show()
+                    if (maxCount == 1) {
+                        FileUploader.uploadFile(images[0], callback) {
+                            loadingDialog.dismiss()
+                        }
+                    } else {
+                        FileUploader.uploadFile(images, callback) {
+                            loadingDialog.dismiss()
+                        }
+                    }
+                }
+
+                override fun onCancel() {
+                }
+            })
     }
-
-    fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        if (resultCode != AppCompatActivity.RESULT_OK) {
-            return
-        }
-        if (requestCode == REQUEST_CODE && data != null) {
-            onSelectPhotoSuccess(data)
-        }
-    }
-
-    private fun onSelectPhotoSuccess(data: Intent) {
-        //获取选择器返回的数据
-        val images: ArrayList<String> =
-            data.getStringArrayListExtra(ImageSelector.SELECT_RESULT) as ArrayList<String>
-        val isCameraImage: Boolean = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false)
-
-
-
-        LogUtils.e("images:$images")
-        loadingDialog.show()
-        if (maxCount == 1) {
-            FileUploader.uploadFile(images[0], callback) {
-                loadingDialog.dismiss()
-            }
-        } else {
-            FileUploader.uploadFile(images, callback) {
-                loadingDialog.dismiss()
-            }
-        }
-    }
-
 
     /**
      * 上传绘制后的图片
@@ -149,44 +116,6 @@
             loadingDialog.dismiss()
         }
     }
-
-//    private val callBack = OssCallBack()
-//
-//    private inner class OssCallBack : IOssCallBack {
-//        override fun onAllListSuccess(ossPaths: MutableList<EntityRef>) {
-//            super.onAllListSuccess(ossPaths)
-//            loadingDialog.dismiss()
-//        }
-//
-//        override fun onSuccess(entityRef: EntityRef) {
-//            activity.runOnUiThread {
-//                if (maxCount == 1) {
-//                    loadingDialog.dismiss()
-//                }
-//                onUploadSuccess(entityRef)
-//            }
-//        }
-//
-//        override fun onFailed() {
-//            activity.runOnUiThread {
-//                loadingDialog.dismiss()
-//                onUploadFailed()
-//                activity.toast("图片上传失败,请重新选择")
-//            }
-//        }
-//    }
-//
-//    private fun onUploadSuccess(entity: EntityRef) {
-//        synchronized(this) {
-//            callback.onUploadSuccess(entity)
-//        }
-//    }
-//
-//    private fun onUploadFailed() {
-//        synchronized(this) {
-//            callback.onUploadFailed()
-//        }
-//    }
 
     interface IImageCallback {
 

--
Gitblit v1.7.1