android:resource=“@xml/file_paths”
定义了类 FileProvider
使用的配置文件,文件名字不违法命名规范情况下随意。
增加一个特定的ContentProvider
,FileProvider
,包名androidx.core.content
。
FileProvider 适配文件
文件地址 res/xml/file_paths.xml
空文件内容如下
<?xml version="1.0" encoding="utf-8"?>里面的具体配置为,Android Studio 提示为这五个地方。
网站介绍上还有一个
代码里面可以看到还有一个
上面各个 -path
的区别是定义的根目录不同。
-path | 根目录 |
---|---|
files-path | Context.getFilesDir() |
cache-path | Context.getCacheDir() |
external-path | Environment.getExternalStorageDirectory() |
external-files-path | Context.getExternalFilesDir(null) |
external-cache-path | Context.getExternalCacheDir() |
external-media-path | Context.getExternalMediaDirs() |
root-path | / |
Path 节点里面的 name 属性
唯一不重复
Path 节点里面的 path 属性
文件夹名字,自动包括此文件夹下面的子目录
例子:
这样定义后,/sdcard/Pictures
里面的所有文件,都可以从自己的App里面发出到其他App中使用。
具体应用
我们 App 涉及到这个地方不多。都是简单的应用。
图片分享
场景,App 内部生成一张图片,并使用系统分享。
核心代码
Uri uri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, getPackageName() + “.fileProvider”, file);
} else {
uri = Uri.fromFile(file);
}
视频播放
有个功能视频播放使用的系统播放器,同时有视频异步下载。如果下载完成,播放本地视频。会使用这个功能。
核心代码
Uri uri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, getPackageName() + “.fileProvider”, file);
} else {
uri = Uri.fromFile(file);
}
// 上面的和图片分享一致。但需要额外增加一行权限代码
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
总结
相对而言,这个适配是比较简单的。我认为需要注意的有两个点。
- 要全部修改,不能有遗漏。包括代码和配置
最后
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
最后针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
pics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!