Android 13中添加.nomedia文件导致获权应用无法访问媒体文件的问题及解决方案咨询
Android 13中添加.nomedia文件导致获权应用无法访问媒体文件的问题及解决方案咨询
我最近碰到一个特别困扰的问题:当我的应用通过Storage Access Framework(SAF)获得某个含有媒体文件的文件夹的读写权限后,只要在该文件夹里添加.nomedia文件,应用就再也访问不到里面的媒体文件了。按道理来说,.nomedia应该只是把媒体文件从图库或其他媒体类应用中隐藏,而不是阻止已经获得权限的应用本身访问这些资源啊,而且在SAF出现之前,.nomedia的行为一直是符合预期的。
问题复现步骤:
- 在应用内选择一个包含媒体文件的文件夹,授予应用读写权限
- 确认此时应用可以正常读取该文件夹内的媒体文件
- 手动在该文件夹中添加.nomedia文件
- 返回应用,发现原本可访问的媒体文件已经无法被读取
设备与系统信息:
- 设备:Pixel 7 Pro
- 操作系统:Android 13
LogCat报错信息:
Permission to access file: /storage/emulated/0/XX/1705.jpg is denied Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/XX/NRCTOPO/03/11E5/1705.jpg: open failed: EACCES (Permission denied)
有没有开发者遇到过类似的问题?或者有什么可行的解决方案吗?
以下是我用于选择文件夹并获取权限的核心代码:
// 通过选择器选取文件夹 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION ); activity.startActivityForResult(intent, SELECT_FOLDER); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { Bundle extras = data.getExtras(); switch(requestCode) { case SELECT_FOLDER: Uri uri = data.getData(); getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION |Intent.FLAG_GRANT_WRITE_URI_PERMISSION); break; } } }
备注:内容来源于stack exchange,提问作者MuskokaGeek
相关产品推荐
相关产品推荐

