Android 7.0 手机 路径问题

2017-05-17  本文已影响0人  newszhu

原因 : 

Android7.0又引入“私有目录被限制访问”,“StrictMode API 政策”。

解释:

私有目录被限制访问“ 是指在Android7.0中为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录将被限制访问。这点类似iOS的沙盒机制。

" StrictMode API 政策" 是指禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常。

解决方法:

使用FileProvider解决上述异常

步骤:

1. 声明FileProvider,这里是自己实现一个子类,子类为空class

声明FileProvider

    exported:要求必须为false,为true则会报安全异常。

    grantUriPermissions:true,表示授予 URI 临时访问权限。

    authorities组件标识,按照江湖规矩,都以包名开头,避免和其它应用发生冲突。

2. 指定共享目录  "@xml/provider_paths"

共享目录文件

注意:

列举

上述代码中path="",是有特殊意义的,它代码根目录,也就是说你可以向其它的应用共享根目录及其子目录下任何一个文件了。

如果你将path设为path="pictures",那么它代表着根目录下的pictures目录(eg:/storage/emulated/0/pictures),如果你向其它应用分享pictures目录范围之外的文件是不行的。

3.定义ProviderUtil

ProviderUtil类

4.调用代码以安装应用为例 (7.0以上修改路径,以下正常)

调用

补充:

  files-path  --表示Context.getFilesDir()目录或者其子目录。 --   示例: /data/data/com.chen.gradle/files/test1

cache-path--表示Context.getCacheDir()目录或者其子目录。--示例: /data/data/com.chen.gradle/cache/test2

external-path--表示Environment.getExternalStorageDirectory()目录或者其子目录。--示例: /storage/emulated/0/test3

external-files-path--表示Context.getExternalFilesDir(null)目录或者其子目录。--示例:/storage/emulated/0/Android/data/com.chen.gradle/files/test4

external-cache-path--表示Context.getExternalCacheDir()目录或者其子目录。--示例: /storage/emulated/0/Android/data/com.chen.gradle/cache/test5

上一篇下一篇

猜你喜欢

热点阅读