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