今天许多新用户反馈app无法上传图片,都是Android10及以上。
ios能正常上传,且我们无法跟后台要请求日志。
第一步:复现问题
用测试机能够正常上传,没有和用户同机型的真机无法调试。于是上云真机(远程调试)复现情况。
推荐云真机平台:
https://console.cloud.tencent.com/wetest/cloudphone/remote 腾讯 免费半小时(只能一次测试,需实名)
https://cn.devecostudio.huawei.com/console/testservice/remote 华为 免费8小时(机型少,需实名)
★https://emas.console.aliyun.com/ 阿里云 每个账号每月30分,机型相对齐全(/流泪 太良心了伙计们,需实名)
★https://apm.umeng.com/platform/ 友盟 集成sdk300分钟/不集成60分钟(不用实名)
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