Android 7.0 手机 路径问题

原因 : 

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的...
    东经315度阅读 1,426评论 0 14
  • 我的博客[http://lovexiaoai.cn/]我的博客:Android7.0须知--应用间共享文件(Fil...
    笑笑百味人生阅读 68,856评论 35 116
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,590评论 19 139
  • 我就说,还是会有问题。我觉得可烦了。什么叫等我给他发消息,为啥不能主动发消息?可是人家又做错了啥。我不知道。我就...
    四月生i阅读 194评论 0 0
  • 那天淅淅沥沥小雨 我终于在你面前软弱 你温暖有力的怀抱 让我一度留恋不舍 我毫无防备被你闯进心里 想被你捧在手心 ...
    薇朵儿阅读 357评论 2 3

友情链接更多精彩内容