背景:各大应用商店强制要求应用基于Android O(target 26)适配
无奈只能进行适配了。
尝试过使用以下方法获取真实路径:
String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME};
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(contentUri, filePathColumn, null, null, null);
很可惜,出现了以下错误
IllegalArgumentException: column'_data' does not exist. Available columns: []
到处查资料后发现,可以用以下方法获得inputstream
context.getContentResolver().openInputStream(uri)
要么就直接使用这个流,要么就保存成一个新文件,取新文件的地址。
试了很多APP都不支持打开这种fileprovider生成的content:// 开头的uri (比如ES文件浏览器,百度云),QQ微信是支持的,应该也是用获取流的方式。
参考资料
Android兼容性解决一:Android 7.0 FileUriExposedException 解决
https://www.jianshu.com/p/0406d5002d78