diff --git a/ImagePickerLib/src/main/java/com/mx/imgpicker/app/picker/MXImgPickerActivity.kt b/ImagePickerLib/src/main/java/com/mx/imgpicker/app/picker/MXImgPickerActivity.kt index b573f4211468286b8ddbc41d6c2ef1f6dbb0dc3b..149d2a21dcf577204abd5220aff506819bf2903b 100644 --- a/ImagePickerLib/src/main/java/com/mx/imgpicker/app/picker/MXImgPickerActivity.kt +++ b/ImagePickerLib/src/main/java/com/mx/imgpicker/app/picker/MXImgPickerActivity.kt @@ -2,6 +2,7 @@ package com.mx.imgpicker.app.picker import android.Manifest import android.content.Intent +import android.os.Build import android.os.Bundle import android.provider.MediaStore import android.widget.Toast @@ -69,7 +70,11 @@ class MXImgPickerActivity : AppCompatActivity() { } MXUtils.log("启动") - val permissions = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE) + val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf(Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO) + } else { + arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE) + } if (!MXUtils.hasPermission(this, permissions)) { Toast.makeText( this, diff --git a/README.md b/README.md index 3d055cede9b933af358a41ff3fe1c6677c8c99f1..8b92cb147e54dfa5404c13da0850deff30d3fd62 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Gradle引用 ```gradle - implementation 'com.gitee.zhangmengxiong:MXImagePicker:1.5.8' + implementation 'com.gitee.zhangmengxiong:MXImagePicker:1.5.9' ``` ![Image text](https://gitee.com/zhangmengxiong/MXImagePicker/raw/master/imgs/screenshot1.png) @@ -30,8 +30,13 @@ Gradle引用 #### 第二步:使用前需要修改‘AndroidManifest.xml’配置:添加相册、存储权限 ```kotlin - Manifest.permission.CAMERA + // 如果 Android版本 < 33 需要以下权限: +Manifest.permission.CAMERA Manifest.permission.READ_EXTERNAL_STORAGE +// 如果 Android版本 >= 33 需要以下权限: +Manifest.permission.CAMERA +Manifest.permission.READ_MEDIA_IMAGES +Manifest.permission.READ_MEDIA_VIDEO // targetSdkVersion >= 29 的应用需要在application节点添加以下属性 android:requestLegacyExternalStorage = "true" @@ -59,9 +64,9 @@ MXScanBiz.scanAll(this, lifecycleScope) 1. `setMaxSize(size: Int)` 设置最大选择文件个数 2. `setType(type: PickerType)` 设置类型 - * PickerType.Image = 图片 - * PickerType.Video = 视频 - * PickerType.ImageAndVideo = 图片 + 视频 混合选择 + * PickerType.Image = 图片 + * PickerType.Video = 视频 + * PickerType.ImageAndVideo = 图片 + 视频 混合选择 3. `setCameraEnable(enable: Boolean)` 设置是否启动拍摄功能,默认=true 4. `setMaxVideoLength(length: Int)` 当类型=Video时,可以选择视频最大时长限制,单位:秒 默认=-1 无限制 5. `setMaxListSize(size: Int)` 最长列表加载长度,防止图片过多时产生OOM -1=不限制 默认限制长度=1000条 @@ -69,12 +74,12 @@ MXScanBiz.scanAll(this, lifecycleScope) ```kotlin // 在图片选择器Activity创建时会回调这个方法,一般会通过这个来改变导航栏、状态栏的Theme,demo中搭配`ImmersionBar`来实现沉浸式效果 MXImagePicker.registerActivityCallback { activity -> - ImmersionBar.with(activity) - .autoDarkModeEnable(true) - .statusBarColorInt(activity.resources.getColor(R.color.picker_color_background)) - .fitsSystemWindows(true) - .navigationBarColor(R.color.picker_color_background) - .init() + ImmersionBar.with(activity) + .autoDarkModeEnable(true) + .statusBarColorInt(activity.resources.getColor(R.color.picker_color_background)) + .fitsSystemWindows(true) + .navigationBarColor(R.color.picker_color_background) + .init() } ``` @@ -87,10 +92,10 @@ MXImagePicker.registerActivityCallback { activity -> #333333 - + #F1F1F1 - + #03CE65 ``` @@ -100,18 +105,18 @@ MXImagePicker.registerActivityCallback { activity -> ```xml 选择 - 全部 - 您最多只能选择 %s 张图片! - 您最多只能选择 %s 个视频! - 只能选择 %s 秒以内的视频 - 需要写入存储、相机权限 - 需要读取存储权限 - 打开失败! - 预览 - 原图 - 拍摄图片 - 拍摄视频 - 图片查看 +全部 +您最多只能选择 %s 张图片! +您最多只能选择 %s 个视频! +只能选择 %s 秒以内的视频 +需要写入存储、相机权限 +需要读取存储权限 +打开失败! +预览 +原图 +拍摄图片 +拍摄视频 +图片查看 ``` dimens.xml 资源 @@ -131,16 +136,16 @@ data class MXItem(val path: String, val time: Long, val type: MXPickerType, val // 全局注册加载器,可以卸载Application里面,不影响启动速度 MXImagePicker.registerImageLoader { activity, item, imageView -> - if (File(item.path).exists()) { - Glide.with(activity).load(File(item.path)) - .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) - } else if (item.path.startsWith("http")) { - Glide.with(activity).load(item.path) - .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) - } else { - Glide.with(activity).load(item.uri) - .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) - } + if (File(item.path).exists()) { + Glide.with(activity).load(File(item.path)) + .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) + } else if (item.path.startsWith("http")) { + Glide.with(activity).load(item.path) + .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) + } else { + Glide.with(activity).load(item.uri) + .placeholder(R.drawable.mx_icon_picker_image_place_holder).into(imageView) + } } ``` @@ -148,11 +153,11 @@ MXImagePicker.registerImageLoader { activity, item, imageView -> ```kotlin override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == RESULT_OK && requestCode == 0x22) { - val paths = MXPickerBuilder.getPickerResult(data) ?: return //返回List类型数据 - println(paths) - } + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == RESULT_OK && requestCode == 0x22) { + val paths = MXPickerBuilder.getPickerResult(data) ?: return //返回List类型数据 + println(paths) + } } ``` @@ -183,10 +188,10 @@ val file = builder.getCaptureFile() ```kotlin MXImgShowActivity.open( - this, arrayListOf( - "http://videos.jzvd.org/v/饺子主动.jpg", - "http://videos.jzvd.org/v/饺子运动.jpg" - ), "图片详情" + this, arrayListOf( + "http://videos.jzvd.org/v/饺子主动.jpg", + "http://videos.jzvd.org/v/饺子运动.jpg" + ), "图片详情" ) ``` @@ -195,9 +200,9 @@ MXImgShowActivity.open( ```kotlin val file = File(".../xx.png") val scaleImg = MXImageCompress.from(context) - .setCacheDir(applicationContext.cacheDir) // 缓存目录 - .setSupportAlpha(true) // 支持透明通道(’.png‘格式) 默认=’.jpg‘格式 - .setIgnoreFileSize(50) // 设置文件低于这个大小时,不进行压缩 - .compress(file) + .setCacheDir(applicationContext.cacheDir) // 缓存目录 + .setSupportAlpha(true) // 支持透明通道(’.png‘格式) 默认=’.jpg‘格式 + .setIgnoreFileSize(50) // 设置文件低于这个大小时,不进行压缩 + .compress(file) ``` \ No newline at end of file diff --git a/app/src/main/java/com/mx/imagepicker_sample/MainActivity.kt b/app/src/main/java/com/mx/imagepicker_sample/MainActivity.kt index 0fe7aef8976ff8f8531e1d3437d0389ea407d9f4..53075ff157a4dd292d912c1b9f0eabd99c5c511f 100644 --- a/app/src/main/java/com/mx/imagepicker_sample/MainActivity.kt +++ b/app/src/main/java/com/mx/imagepicker_sample/MainActivity.kt @@ -5,16 +5,14 @@ import android.net.Uri import android.os.Bundle import android.view.View import androidx.fragment.app.FragmentActivity -import androidx.lifecycle.lifecycleScope import com.bumptech.glide.Glide import com.gyf.immersionbar.ImmersionBar import com.mx.imgpicker.MXImagePicker import com.mx.imgpicker.app.MXImgShowActivity import com.mx.imgpicker.builder.MXCaptureBuilder import com.mx.imgpicker.builder.MXPickerBuilder -import com.mx.imgpicker.models.MXPickerType import com.mx.imgpicker.compress.MXImageCompress -import com.mx.imgpicker.utils.MXScanBiz +import com.mx.imgpicker.models.MXPickerType import com.mx.starter.MXStarter import java.io.File diff --git a/build.gradle b/build.gradle index b484a12f2c363174b406ccbb5481f02f66d24ddd..4566a403c6f24264e28bb3f4a1a2058dddd97653 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -32,10 +32,10 @@ task clean(type: Delete) { } ext { - compileSdkVersion = 32 - targetSdkVersion = 32 + compileSdkVersion = 33 + targetSdkVersion = 33 minSdkVersion = 19 versionCode = 1 - versionName = "1.5.8" + versionName = "1.5.9" } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 529e514caed82022f81fc0c0a0c5a9da98ab2b9d..3d0386eb6682aad64ee54762100116fdd6ed203c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Mar 10 15:22:55 CST 2022 +#Thu Mar 02 16:14:03 CST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME