-
Notifications
You must be signed in to change notification settings - Fork 3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
适配android13了 #2499
Comments
是吧READ_EXTERNAL_STORAGE 权限替换成READ_MEDIA_IMAGE、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO 来替代适配嘛?最近上架,google拒绝了理由READ_EXTERNAL_STORAGE |
自己下源码,把框架的权限校验和请求全部删除,直接调用相册api,然后外部,自己申请对应权限后,在启动这个框架就好了。 |
着急的话,自己先处理下吧,这个框架已经写的很好了。自己拦截权限处理setPermissionsInterceptListener,然后将READ_EXTERNAL_STORAGE和WRITE替换为READ_MEDIA_IMAGE...即可,非常简单。 |
不想fork代码的话,自己拦截权限处理即可。如下所示: /** @author petterp 结合XXPermissions 权限适配simple */
/** 拦截相册库的权限申请流程,simple */
class OnPermissionsInterceptListenerImpl : OnPermissionsInterceptListener {
override fun requestPermission(
fragment: Fragment?,
permissionArray: Array<out String>?,
call: OnRequestPermissionListener?
) {
if (permissionArray == null || fragment == null || fragment.context == null) return
if (XXPermissions.isGranted(fragment.context, permissionArray.toCompatPermissions)) {
call?.onCall(permissionArray, true)
return
}
// 这里去申请自己的权限,可以在此处增加弹窗询问用户是否需要给权限
XXPermissions.with(fragment)
.permission(permissionArray.toCompatPermissions)
.request(OnPermissionCallbackImpl(fragment, permissionArray, call))
}
override fun hasPermissions(fragment: Fragment?, permissionArray: Array<out String>?): Boolean {
if (permissionArray == null || fragment == null) return false
return XXPermissions.isGranted(
fragment.context,
permissionArray.toCompatPermissions
)
}
}
/** 拦截相册库的权限拒绝流程 */
class OnPermissionDeniedListenerImpl : OnPermissionDeniedListener {
override fun onDenied(
fragment: Fragment?,
permissionArray: Array<out String>?,
requestCode: Int,
call: OnCallbackListener<Boolean>?
) {
if (fragment == null || permissionArray == null || fragment.context == null) return
// 这里即未获取到权限时,合格的流程这里应该询问用户是否需要前往设置打开,示例如下
XXPermissions.startPermissionActivity(
fragment,
permissionArray.toCompatPermissions,
object : OnPermissionPageCallback {
override fun onGranted() {
call?.onCall(true)
}
override fun onDenied() {
ToastUtil.show("权限打开失败")
call?.onCall(false)
}
}
)
}
}
/** 具体的权限申请impl,在这里,我们对权限进行二次调整 */
class OnPermissionCallbackImpl(
private val fragment: Fragment,
private val permissionArray: Array<out String>,
private val call: OnRequestPermissionListener?
) : OnPermissionCallback {
override fun onGranted(permissions: MutableList<String>?, all: Boolean) {
if (permissions == null) {
call?.onCall(permissionArray, false)
return
}
if (all) {
call?.onCall(permissionArray, true)
} else {
// 此时直接return,因为我们知道这是用户自己操作的
return
}
}
override fun onDenied(permissions: MutableList<String>?, never: Boolean) {
if (fragment.activity == null || permissions == null) return
// 永久拒绝时让流程延续下去
if (never) {
call?.onCall(permissionArray, false)
}
}
}
private val Array<out String>.isFilePermission: Boolean
get() = this.contains(Permission.WRITE_EXTERNAL_STORAGE) ||
this.contains(Permission.READ_EXTERNAL_STORAGE)
private val Array<out String>.isCamera: Boolean
get() = this.contains(Permission.CAMERA)
private val Array<out String>.toCompatPermissions: Array<out String>
get() {
if (isFilePermission) return arrayOf(Permission.READ_MEDIA_IMAGES)
return this
} |
大佬们有没有遇到一个选择完图片压缩很长时间的情况,就是圈圈一直转在哪里,我也不知道问题是不是出在压缩图片这里,客户的手机好几个碰到这样的情况,找了下没找到问题,头疼。 |
找客户要一下原图试试,看看是不是因为heif或者其他原因 |
你好,感谢回复,我打日志一步步看了下,下面图片这一步
InputStream inputStream = context.getContentResolver().openInputStream(Uri.parse(media.getPath())); 花的时间最长,有时候能达到50多秒。
不过很奇怪我手机里就一张图片特别容易出现这个现象,就是来回选择图片,很容易出现。这张图片也没有什么特别的,就是调用系统相机拍的照片。尺寸这些和我另外拍的部分图片一样。。。
我把这张图片放在附件发给你。我还没找到解决办法,假如大佬有空的话帮忙看下。
我试了下,这张图片在最新版的pictureselector 3.10.6上也会出现这个现象,手机是 荣耀v20。。。
下面是我打的记录日志 4 到 40这一步,有时候能花50多秒,,,
…------------------ 原始邮件 ------------------
发件人: "LuckSiege/PictureSelector" ***@***.***>;
发送时间: 2022年11月3日(星期四) 晚上6:48
***@***.***>;
***@***.******@***.***>;
主题: Re: [LuckSiege/PictureSelector] 适配android13了 (Issue #2499)
着急的话,自己先处理下吧,这个框架已经写的很好了。自己拦截权限处理setPermissionsInterceptListener,然后将READ_EXTERNAL_STORAGE和WRITE替换为READ_MEDIA_IMAGE...即可,非常简单。
大佬们有没有遇到一个选择完图片压缩很长时间的情况,就是圈圈一直转在哪里,我也不知道问题是不是出在压缩图片这里,客户的手机好几个碰到这样的情况,找了下没找到问题,头疼。
找客户要一下原图试试,看看是不是因为heif或者其他原因
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
从QQ邮箱发来的超大附件
IMG_20221101_194445.jpg (2.90M, 无限期)进入下载页面:http://mail.qq.com/cgi-bin/ftnExs_download?k=743537308891b29eb45d87084535514e005100545702565415030303531857025e021a520703004c0850525154015a555c0354516322632875726802530751500905066f520c57550c00195a1352635c&t=exs_ftn_download&code=8570c5ca
|
最新库3.10.版本获取图片输入流的方式好像经过了大改动,我APP用的版本是低版本的,但是我用他的Demo跑起来那张图片还是会出现一样的问题的,估计问题的本质没有变。
新版库获取流的位置应该是在这里。都是在压缩类Luban这个类里面。
…------------------ 原始邮件 ------------------
发件人: "LuckSiege/PictureSelector" ***@***.***>;
发送时间: 2022年11月3日(星期四) 晚上6:48
***@***.***>;
***@***.******@***.***>;
主题: Re: [LuckSiege/PictureSelector] 适配android13了 (Issue #2499)
着急的话,自己先处理下吧,这个框架已经写的很好了。自己拦截权限处理setPermissionsInterceptListener,然后将READ_EXTERNAL_STORAGE和WRITE替换为READ_MEDIA_IMAGE...即可,非常简单。
大佬们有没有遇到一个选择完图片压缩很长时间的情况,就是圈圈一直转在哪里,我也不知道问题是不是出在压缩图片这里,客户的手机好几个碰到这样的情况,找了下没找到问题,头疼。
找客户要一下原图试试,看看是不是因为heif或者其他原因
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
Current use version?
该适配android13 了
READ_EXTERNAL_STORAGE权限被细化了,开发者需要使用READ_MEDIA_IMAGE、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO 来替代适配;通过官方提供的 Intent(MediaStore.ACTION_PICK_IMAGES); 打开的系统相册选择组件
The text was updated successfully, but these errors were encountered: