Android 7.0 出现 ”FileUriExposedException“ 和 ”解析包出现错误“ 异常的解决办法
问题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
直面挑战,躬身入局