今天许多新用户反馈app无法上传图片,都是Android10及以上。 ios能正常上传,且看不到后台日志。
第一步:复现问题
用测试机能够正常上传,没有和用户同机型的真机无法调试。于是上云真机(远程调试)复现情况。
推荐云真机平台: https://console.cloud.tencent.com/wetest/cloudphone/remote 腾讯实名免费半小时 https://cn.devecostudio.huawei.com/console/testservice/remote 华为实名免费8小时(机型有限)
ps: 不要瞎去平台注册账号,会被客服持续骚扰。
第二步:寻找问题。
获取异常信息: ToastUtils.showMessage(Throwable对象.getMessage()); 捕获到异常:open failed:EACCES(Permission denied),权限不足。 虽已动态申请了通常的存储权限,但在Android10(API 29)及以上系统通过绝对路径打开文件时,可能出现权限不足的错误。 应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储)。此类应用只能看到本应用专有的目录以及特定类型的媒体。
第三步:解决问题。
通过new File(filePath)去打开的这类路径 不具有直接内核访问权限 1)设置使用旧版本的存储规则:
<application
android:requestLegacyExternalStorage="true"...
2)build.gradle:sdk版本在29及以上,不然找不到上面的属性
compileSdkVersion 30
targetSdkVersion 30
再次用云真机测试,上传成功。 参考自:https://blog.csdn.net/little_story/article/details/106409219
|