問題1 :android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.xxx.xxx.xxx.release/files/Download/2017120600.apk exposed beyond app through Intent.getData()
問題2 : 已經做了 Android 7.0 的 FileProvider 的適配,但是在應用內下載升級的時候提示 ”解析包出現問題“ .
-
以上兩個問題,都是 Android 7.0 適配的問題。
- 問題1 : 沒有做 Android 7.0 的適配,做了適配就沒有這個錯誤了
- 問題2 : 在適配的時候,XML 文件中的 PATHS 寫的不正確。造成獲取到的 Uri 是錯誤的,因為提示解析包出現問題。只要正確的路徑就沒有問題。
-
FileProvider 繼承 ContentProvider。肯定是以
conent://com.xxx.xxx/
開頭的, 其中com.xxx.xxx
是應用的包名。所以使用 FileProvider 與使用 ContentProvider 一樣的。 -
注意點:注意路徑,在 XML 的 PATHS 中寫入了路徑,每次會把這些路徑讀取到內存,然后使用 FileProvider 的時候會對傳入的 file 做路徑的匹配,匹配成功了,就可以正確的使用文件了。匹配不成功,會出現異常。所以在 XML 的 PATH 的時候注意根據自己所在文件的路徑填寫正確。以下列表是不同目錄的 PATH:
使用中注意在 XML 文件中的路徑的填寫,填寫錯誤的話,會無法訪問到該路徑。
- files-path : Context.getFilesDir().
- cache-path : getCacheDir().
- external-path : Environment.getExternalStorageDirectory().
- external-files-path : Context#getExternalFilesDir(String) Context.getExternalFilesDir(null).
- external-cache-path : Context.getExternalCacheDir().
參考:http://blog.csdn.net/yy1300326388/article/details/52787853
FileProvider : https://developer.android.com/reference/android/support/v4/content/FileProvider.html