Android实践 -- 使用FileProvider安全的共享文件 简介篇
来源:互联网 发布:淘宝信用等级怎么看 编辑:程序博客网 时间:2024/06/10 09:42
使用FileProvider安全的共享文件 简介篇
FileProvider
是ContentProvider
的一个子类,可以通过content://uri
的方式更安全的共享文件
可以在通过URI
的方式共享文件时,可以通过Intent
的setFlags()
赋予文件临时的读写权限,不需要
设置全局的读写权限
定义一个FileProvider
不需要继承FileProvider
,只需要在AndroidManifest.xml
中定义一个<provider>
的组件即可,设置
android:name
的属性为android.support.v4.content.FileProvider
,设置android:authorities
的属性为packange_name.fileprovider
,设置android:exported
的属性值为false
,因为FileProvider
不需要公开,设置android:grantUriPermissions="true"
这样可以增加临时权限,在meta-data
中指出
需要共享的文件夹路径
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.demo.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider>
可以共享的文件
在meta-data
中需要指定需要共享的文件,有哪些文件可以通过FileProvider
来共享呢,需要在
xml/filepaths.xml中配置相关的路径,一般的格式如下
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="my_images" path="images/"/> ... </paths>
paths
中可以包含一个或多个子元素,name="name"
这个属性相当于path
的别名可以隐藏子目录
path="path"
就是你要共享的目录
应用的内部资源
可以通过
Context.getFilesDir()
获得的路径的子目录<files-path name="name" path="path" />
应用内部的缓存文件夹
可以通过
getCacheDir()
获得的路径的子目录<cache-path name="name" path="path" />
sdcard文件
可以通过
Environment.getExternalStorageDirectory()
获得的子目录<external-path name="name" path="path" />
应用的外部储存目录
可以通过
Context.getExternalFilesDir(String)
获得的子目录<external-files-path name="name" path="path" />
应用的外部缓存目录
可以通过
Context.getExternalCacheDir()
获得的子目录<external-cache-path name="name" path="path" />
生成文件的URI
为了和另外一个app利用content URI
的方式共享文件,我们需要生成这个文件的URI,可以通过
getUriForFile()
方法生成文件的URI
File imagePath = new File(Context.getFilesDir(), "images"); File newFile = new File(imagePath, "default_image.jpg"); Uri contentUri = getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);
赋予URI临时权限
Intent
的setData()
方法,将数据放进Intent
中- 通过
Intent
的setFlags()
方法设置临时权限FLAG_GRANT_READ_URI_PERMISSION or FLAG_GRANT_WRITE_URI_PERMISSION
或者both - 将
Intent
发送到另一个app
接受处理Intent
另一个app接受处理对应的文件即可
- Android实践 -- 使用FileProvider安全的共享文件 简介篇
- Android实践 -- 使用FileProvider安全的共享文件 应用篇
- 使用FileProvider共享文件
- 使用FileProvider共享文件
- FileProvider共享文件、缓存的使用
- FileProvider android 7 文件共享
- android文件FileProvider共享相关
- Android FileProvider的使用
- Android 应用间共享文件(FileProvider)
- android 7.0应用间共享文件----FileProvider
- Android7.0 使用FileProvider 共享文件
- 详解FileProvider的文件共享机制
- FileProvider文件共享
- Android 7.0 FileProvider的使用
- Android 7.0 FileProvider的使用
- Android 7.0 FileProvider的使用
- Android 7.0 适配-应用之间共享文件(FileProvider)
- Android 7.0 通过FileProvider实现应用间文件共享
- 定位城市,显示名称
- c++ time.h显示程序运行时间
- Android 根据路径获取文件名
- sockaddr_in
- Android属性动画的简单使用方法
- Android实践 -- 使用FileProvider安全的共享文件 简介篇
- C语言实现五大排序算法
- 关于 WPF浏览器程序报Security错误的解决方法的细究
- SQl语句中使用占位符的优点
- 软件架构书单 - 整理中
- Eclipse常用快捷操作
- Cpp Concurrency In Action(读书笔记1)——线程入门及管理
- LintCodet题目
- 你的文章,为什么没有人读?