18034727885
2026-05-14 dad2ded3e9e9d2edf55c7ce10e791588b526961f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package com.example.smart.image
 
import FileUploader
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.Settings
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 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 var ossObjectName = ""
 
    private var maxCount = 1
    val loadingDialog: LoadingDialog = LoadingDialog(activity)
 
    /**
     * oss object name
     */
    fun setObjectName(name: String) {
        ossObjectName = name
    }
 
    /**
     * 检测android13 存储权限
     */
    private fun checkPer(): Boolean {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 
            return Environment.isExternalStorageManager()
//                 return ContextCompat.checkSelfPermission(
//                 activity,
//                 Manifest.permission.MANAGE_EXTERNAL_STORAGE
//             ) == PackageManager.PERMISSION_GRANTED
        }
        return true
    }
 
    fun showImageSelect(maxCount: Int = 9) {
        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
        }
        this.maxCount = maxCount
        //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
                }
                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 uploadPicAfterDraw(uri: Uri) {
        val pathFromUri = FileTools.getRealPathFromUri(activity, uri)
        FileUploader.uploadFile(pathFromUri, callback) {
            loadingDialog.dismiss()
        }
    }
 
    interface IImageCallback {
 
        fun onUploadSuccess(entityRef: List<ImageRef>)
 
        fun onUploadFailed()
 
    }
}