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

posted @ 2017-12-06 19:44  熠然  阅读(3559)  评论(0编辑  收藏  举报