XXPermissions
XXPermissions copied to clipboard
[Bug]:兼容性没做好,引发崩溃,使用Android13的代码,运行在Android12设备上不向下兼容
框架版本【必填】
18.3
问题描述【必填】
兼容性没做好,引发崩溃,使用Android13的代码,运行在Android12设备上不向下兼容
复现步骤【必填】
使用Android13的代码,运行在Android12设备上不向下兼容,
XXPermissions.with(this)
.unchecked()
.permission(Permission.READ_MEDIA_IMAGES)
.permission(Permission.READ_MEDIA_VIDEO)
.permission(Permission.READ_MEDIA_AUDIO)
.permission(Permission.MANAGE_EXTERNAL_STORAGE)
.request { permissions, all ->
if (all) {
} else {
}
}
是否必现【必填】
是
项目 targetSdkVersion【必填】
33
出现问题的手机信息【必填】
荣耀30pro
出现问题的安卓版本【必填】
12
问题信息的来源渠道【必填】
自己遇到的
是部分机型还是所有机型都会出现【必答】
所有
框架最新的版本是否存在这个问题【必答】
是
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
否
issue 列表中是否有人曾提过类似的问题【必答】
否
是否已经搜索过了 issue 列表但还未能解决的【必答】
是
是否可以通过 Demo 来复现该问题【必答】
是
提供报错堆栈
Process: com.pichs.shanhai, PID: 14413
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pichs.shanhai/com.pichs.shanhai.MainActivity}: java.lang.IllegalArgumentException: If you have applied for MANAGE_EXTERNAL_STORAGE permissions, do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4765)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4983)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:123)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3059)
at android.os.Handler.dispatchMessage(Handler.java:117)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.app.ActivityThread.loopProcess(ActivityThread.java:9934)
at android.app.ActivityThread.main(ActivityThread.java:9923)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240)
Caused by: java.lang.IllegalArgumentException: If you have applied for MANAGE_EXTERNAL_STORAGE permissions, do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions
at com.hjq.permissions.PermissionChecker.optimizeDeprecatedPermission(PermissionChecker.java:687)
at com.hjq.permissions.XXPermissions.request(XXPermissions.java:192)
at com.pichs.shanhai.MainActivity.initPermission(MainActivity.kt:46)
at com.pichs.shanhai.MainActivity.afterOnCreate(MainActivity.kt:24)
at com.pichs.xbase.binding.AbstractBaseActivity.onCreate(AbstractBaseActivity.kt:26)
at android.app.Activity.performCreate(Activity.java:8592)
at android.app.Activity.performCreate(Activity.java:8565)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1344)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4733)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4983)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:123)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3059)
at android.os.Handler.dispatchMessage(Handler.java:117)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.app.ActivityThread.loopProcess(ActivityThread.java:9934)
at android.app.ActivityThread.main(ActivityThread.java:9923)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240)
提供截图或视频
No response
提供解决方案
No response
小伙子,我不是很懂你的操作,你既然申请了 MANAGE_EXTERNAL_STORAGE
权限,就已经有所有文件的管理权限了,为什么还要去申请 READ_MEDIA_IMAGES
、READ_MEDIA_VIDEO
、READ_MEDIA_AUDIO
这几个媒体权限?
小伙子,根据你的反馈,我发现了一个问题,你调用了 unchecked
方法,理论上不应该出现框架抛出的异常,在这里我做了一些优化,你可以下载上面的 aar 包测试一下。
我今天也发现这个问题。红米k30SU。
我看了另一个 issue:[Bug]:一个荣耀手机鸿蒙系统7.0.0.191的兼容问题 #269,也是和这个问题一致的。
我来说明一下为什么要同时申请这两个权限。
只申请 MANAGE_EXTERNAL_STORAGE
权限,会自动跳转到所有文件管理权限授权页面去授权。
但是授权回来后,点开应用管理,权限管理,会发现“文件和文档”权限是禁用的。所以还要引导用户去开启此权限。
这时候,只要随便申请一个和媒体相关的一个权限就可以了。
我现在的解决方案是,将这两个权限分成两次单独申请,就绕过了你的 checkStoragePermission
代码。
@sudot 小伙子,你获取了所有文件管理权限,理论上是不需要申请媒体权限,就可以直接读取文件和文档的,你是在这个过程遇到了什么问题吗?
@sudot 小伙子,你获取了所有文件管理权限,理论上是不需要申请媒体权限,就可以直接读取文件和文档的,你是在这个过程遇到了什么问题吗?
你这么说确实没毛病,但现实情况就是非要单独申请,而且从这两个 issue 你也发现了,国内的系统不是一家这个样子。 不过你也确实提供了解决办法,我们也只是这样反馈一下,具体如何处理还得是作者自己考量。
@sudot 小伙子,假设国产的手机确实有这个问题,那么你为什么要同时申请媒体权限和所有文件的管理权限?如果只是为了读取媒体文件的话,直接申请媒体权限不就可以了?为什么还要连带申请所有文件的管理权限?
我这边也遇到了这个问题,需求是需要获取媒体文件,同时还需要写入配置文件到SD卡根目录。
@GitJoBo 小伙子,获取媒体文件和将配置写入 SD 卡根目录是两码事吧?这两者没有太大的关联性,你为什么不分开两次申请?
长时间没有响应,自动关闭此 issue。