1. 程式人生 > >Android7.0及以上 獲取uri真實路徑

Android7.0及以上 獲取uri真實路徑

背景:各大應用商店強制要求應用基於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微信是支援的,應該也是用獲取流的方式。