-
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,在13上无法使用,百分百必现啊 #2483
Comments
您好,您的邮件我已收到,谢谢!
|
怎么处理的?兄弟分享一下呀 |
您好,您的邮件我已收到,谢谢!
|
可以尝试通过自定义权限适配一下 .setPermissionsInterceptListener(new OnPermissionsInterceptListener() {
@Override
public void requestPermission(Fragment fragment, String[] permissionArray, OnRequestPermissionListener call) {
}
@Override
public boolean hasPermissions(Fragment fragment, String[] permissionArray) {
return false;
}
}) |
Android 13 也就是权限问题可以尝试在打开相册之前先把权限获取到应该就就可以了吧 |
setPermissionsInterceptListener这个方法只能申请权限,但是到页面里面,还会有另外一个读写权限的检测,这会导致出现提示框。 |
我是吧源码下载下来,重新修改了里面的权限申请,适配了Android13。 |
页面内部有读写权限的判断,在android13上面已经没有了。这个外部怎么申请都处理不了 |
自己拦截权限处理即可,权限相关都走自己的方法,非常简单粗暴,也不用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
} |
Current use version?
当前使用的版本是3.10.6!
Will this problem occur in demo?
Demo可以复现这问题!
Describe the problem or provide an error log?
需要升级到13,13上面READ_EXTERNAL_STORAGE权限被拆分成READ_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO三个权限了
The text was updated successfully, but these errors were encountered: