最近Android10的手机不断上市,在对其就进行适配过程中发现对文件操作发生错误,问题如下:
java.lang.SecurityException: getSubscriberId: The user 10163 does not meet the requirements to access device identifiers.
查询官方文档后发现,android10对文件操作进行了更加严格的规定:
1、app私有目录,不需要权限就可以访问。
2、媒体目录(相册、视频、音频...),需求申请READ_EATERNAL_STORAGE权限,访问方式使用MediaStore。
3、下载目录,不要权限,使用Storage Access Framework进行访问。
另外,其他目录只能访问文件列表,不能再读写文件,需要将文件放到自己的私有目录再读写。
解决方案有3个:
1、整体修改项目中的文件读写方式,
2、修改targetSDK为28及以下。
3、在AndroidManifest的application中设置android:requestLegacyExternalStorage="true"。
由于最近项目进度紧张,临时采用方案3进行修改,后续再排期进行适配。
参考:
https://developer.android.google.cn/training/data-storage/files/external-scoped#java
本文作者:余海(sky)
本文为原创作品,未经允许不得转载。