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 { override fun onResult(result: ArrayList?) { 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) fun onUploadFailed() } }