FileProvider共享文件、缓存的使用
来源:互联网 发布:crm软件 用百会 编辑:程序博客网 时间:2024/06/05 18:07
FileProvider 是一个特殊的 ContentProvider 的子类,它使用 content:// Uri 代替了 file:/// Uri.
从而更便利而且安全的为另一个app分享文件。
使用FileProvider前需要在 AndroidManifest.xml中进行配置:
<provider android:name="android.support.v4.content.FileProvider" //provider的类名 android:authorities="com.example.myapp.fileprovider" //没有特定要求,自定义 android:exported="false" //不建议设置为true android:grantUriPermissions="true"> //允许你有给其赋予临时访问权限的权力 <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> //定义资源路径 </provider>
这里是直接使用的v4包中的FileProvider,我们也可以直接继承FileProvider类,适当重写重载函数,但不建议如此做。下面来介绍上面的几个设置:
android:name: provider的类名, 若使用默认的v4的FileProvider可使用”android.support.v4.content.FileProvider”,也可以设置为自定义的继承FileProvider的provider类;
android:authorities: 一个签名认证,可以自定义,但在获取uri的时候需要保持一致;
android:grantUriPermissions: 使用FileProvider的时候需要我们给留出的URI赋予临时访问权限(READ和WRITE),该设置是允许我们行使该项权力;
meta-data: meta-data配置的是我们可以访问的文件的路径配置信息,需要使用xml文件进行配置,FileProvider会通过解析xml文件获取配置项,其中name名字不可改变,应为:android.support.FILE_PROVIDER_PATHS,resource为配置路径信息的配置项目。
创建res/xml/fileprovider_paths.xml文件,并配置路径:
<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="storage" path="../../../"/> <cache-path name="cache-path" path="."></cache-path> <external-cache-path name="external-cache-path" path="."></external-cache-path> <external-files-path name="external-files-path" path="."></external-files-path></paths>
在这个文件中,为每个目录添加一个XML元素指定目录。
paths 可以添加多个子路径:
分享app内部的存储, Context.getFilesDir();
分享外部的存储,Environment.getExternalStorageDirectory();
分享内部缓存目录。(我遇到的就是分享的缓存) getCacheDir();
其中属性的意思,如:
path=”../../../”
name=”storage”
组成的路径就是Environment.getExternalStorageDirectory() + “../../../”+“storage”;
若此处Environment.getExternalStorageDirectory() 的值为/storage/emulated/0/,则完整的路径为:
/storage/emulated/0/../../../storage, 即 /storage。意思就是共享/storage目录下及其子目录下的文件
FileProvider的使用
若要获取IMG_20171111_110012.jpg文件的uri,代码如下:
String auth = "com.example.myapp.fileprovider";String filePath = "/storage/506C-181E/DCIM/CameraVr/IMG_20171111_110012.jpg";File file = new File(filePath ); Uri uri = FileProvider.getUriForFile(context, auth, file);
- FileProvider共享文件、缓存的使用
- 使用FileProvider共享文件
- 使用FileProvider共享文件
- Android实践 -- 使用FileProvider安全的共享文件 简介篇
- Android实践 -- 使用FileProvider安全的共享文件 应用篇
- Android7.0 使用FileProvider 共享文件
- 详解FileProvider的文件共享机制
- FileProvider文件共享
- FileProvider android 7 文件共享
- android文件FileProvider共享相关
- FileProvider控件的使用
- FileProvider的使用
- 7.0fileprovider的使用
- Android FileProvider的使用
- Android7.0 应用间共享文件 FileProvider
- Android 应用间共享文件(FileProvider)
- android 7.0应用间共享文件----FileProvider
- Android 7.0 FileProvider的使用
- mysql高可用-MHA
- jsp 简单模板
- ZZNU17级新生周赛第六场
- ScrollViewHelper
- 浅谈人工智能:现状、任务、构架与统一 | 正本清源
- FileProvider共享文件、缓存的使用
- 并发编程工具之五:Future和Callable 使用
- windows代码设置默认音频输出设备
- 退出vim常用方法
- 递归神经网络
- 高斯消元的浮点数模板
- 圣思园『知识星球』开启
- 二叉树总结
- GIT常用命令