使用FileProvider

来源:互联网 发布:java反射获取类属性值 编辑:程序博客网 时间:2024/06/05 22:43

在Android 7.0,对于私有存贮存在了限制,因此在操作的时候,不能直接通过Uri 了,而是要通过FileProvider可以为你指定的目录下files生成content URI。

(1)

建立自己的FileProvider,因为一个程序中在使用FileProvider时候,可能你调用的第三方的里面也用到了
FileProvider,那么在使用的时候就会存在冲突,建议你在使用时候直接自定义一个:

public class MyFileProvider extends FileProvider {}

(2)

在清单文件中注册:

 <provider            android:name=".bases.MyFileProvider"            android:authorities="mooc.zhihuiyuyi.com.mooc.provider"            android:exported="false"            android:grantUriPermissions="true"            tools:replace="android:authorities"            >            <meta-data                android:name="android.support.FILE_PROVIDER_PATHS"                android:resource="@xml/files_names"                tools:replace="android:resource"                />        </provider>        /***android:name 它的值是固定的,是你的FileProvider,也可以用系统的自带的        android:authorities:属性的值必须要和代码中使用的时候一样。        <meat - data >标签用来指定Uri的共享路径。并且引用了一个@xml/file_paths资源*/

(3)

建立资源文件
在res - New - Directory - xml目录 - New - File

<paths xmlns:android="http://schemas.android.com/apk/res/android">    <!--填写你要所要申请访问的目录地址,name最好是你的目录名,path是你要申请的目录-->    <external-path name="camera_photos" path="."  />    <external-path name="cache" path="Android/data/com.xuezj.fileproviderdemo/cache" />    <external-path name="images" path="Pictures/" />    <external-path name="dcim" path="DCIM/" /></paths>/**在这里面,name 可以随便填,path 属相表示共享的具体路径。*/

这里写图片描述

(4)

使用:

uriP = FileProvider.getUriForFile(MineStudentFragment.this.getContext()                                , "mooc.zhihuiyuyi.com.mooc.provider"                                , tempFile);                                /**这里的参数二和清单文件注册时候的android:authorities一致*/

(5)

权限,还是需要的。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
原创粉丝点击