继上文输出之后,偶逢流感,又遇节日、停电。现在继续未完成的内容。


一、Provider的使用概述

本文暂且介绍FileProvider;至于后续遇到安卓新版本适配的其他Provider,到时再进行补充。

FileProvider:ContentProvider的子类,安卓提供唯一的安全接口用来访问File文件,通过getUriForFile()方法获取File的Uri,以Intent的方式分享给其他应用,并以ContentResolver进行解析此数据;


二、FileProvider

1、清单文件声明

  ...  ...  ... 

FileProvider在V4包中已经包含,所以,可以在使用过程中,无需进行子类继承该类,直接使用。

① 根据您控制的域将android:authorities属性设置为URI权限; 例如,如果您控制域mydomain.com,则应使用权限com.mydomain.fileprovider;

②将android:exported属性设置为false; FileProvider不需要是公共的,即其他应用无法访问;

③将android:grantUriPermissions属性设置为true,授予其他应用对文件的临时访问权限。

2、创建并声明分享文件的路径

①在res/xml中创建file_paths.xml文件,说明需要分享文件的路径;

...

②在file_paths.xml中,对需要分享的文件路径进行说明,如下:

③将file_paths.xml文件以元数据的形式,声明于清单文件中:

④获取需要分享文件的Uri

⑤为Uri设置临时访问权限

两种方式,为Uri赋予临时访问权限,可以是只读、只写,或者,二者兼有;两种方式赋予的权限,会辐射到该应用的其他组件;不同的赋予方式,对权限回收的期限也有不同的影响。

a. Context 提供了两个方法

  • grantUriPermission(String toPackage, Uri uri, int modeFlags)
  • revokeUriPermission(Uri uri, int modeFlags);

可以看到 grantUriPermission() 方法需要传递一个包名,就是你给哪个应用授权,但是很多时候,比如分享,我们并不知道最终用户会选择哪个 app,所以我们可以这样:

List resInfoList = context.getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);for (ResolveInfo resolveInfo : resInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, uri, flag);}

根据 Intent 查询出所有符合的应用,都给他们授权,然后在不需要的时候通过 revokeUriPermission 移除权限。

链接:https://www.jianshu.com/p/be817f3aa145

b. 配合 Intent.addFlags() 授权

既然这是一个 Intent 的 Flag,Intent 也提供了另外一种比较方便的授权方式,那就是使用 Intent.setFlags() 或者 Intent.addFlag 的方式

使用这种形式的授权,权限截止于该 App 所处的堆栈被销毁。也就是说,一旦授权,知道该 App 被完全退出,这段时间内,该 App 享有对此 Uri 指向的文件的对应权限,我们无法主动收回该权限了。

链接:https://www.jianshu.com/p/be817f3aa145

⑥通过Intent分享内容

⑦获取返回值

以不同的requestCode、resultCode,判断是从哪个业务逻辑返回的值,并从intent中获取对应的值;

android uri转file_Android世界:ContentProvider使用相关推荐

  1. Android系统(204)---ContentProvider

    Android:关于ContentProvider的知识都在这里了! 前言 ContentProvider属于 Android的四大组件之一 本文全面解析了 ContentProvider ,包括Co ...

  2. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...

    一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...

  3. 【Android】四大组件之 ContentProvider

    前言 ContentProvider 是 Android 的四大组件之一,有时候我们需要操作其他应用程序的一些数据,就会用到 ContentProvider,ContentProvider 本质上是一 ...

  4. android uri db,Android ContentProvider封装数据库和文件读写总结

    本文是我各处东拼西凑加上自己实现一个ContentProvider的使用总结,留做后用,主要介绍ContentProvider的集成方法. 一.综述 ContentProvider是Android四大 ...

  5. Android插件化原理解析——ContentProvider的插件化

    目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...

  6. Study on Android【五】--自定义ContentProvider的语义

    Android做到现在.开始感觉到Android确实还是太年轻.系统本身好不够成熟,相关文档更是少的可怜.在Android的旅途中到处是暗坑陷阱,掉进去摔得半死,还只能靠自己琢磨着爬出来. 想 在大部 ...

  7. Android 第三次作业 contentprovider与resolver

    作业要求: 1.contentprovider是安卓四大组件之一,请使用其方法类进行数据获取: 2.请自建一个provider,然后在另一个app中使用resolver调用这个provider. 3. ...

  8. Android学习笔记十七.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider

        Android系统本身提供了大量的ContentProvider,例如联系人信息.系统的多媒体信息等,我们开发的应用程序主要是通过ContentResolver来调用系统的ContentPro ...

  9. android URI 和 UIL 图片加载问题

    ImageLoader加载图片问题: UIL图片加载已经非常熟悉,已经知道的是采用的是两级缓存: 内存中和磁盘上 如果都没有则从网络下载. 缓存的依据: UIL根据图片的URI获取缓存在磁盘文件的MD ...

最新文章

  1. java mvc 绑定_关于Java:Spring MVC:将请求属性绑定到控制器方法参数
  2. C语言包含头文件时:#include< > 与 #include ““的区别
  3. 「神策 2021 数据驱动大会」即将亮相上海,再次释放前沿认知与力量
  4. webstorm里stylus代码报错_发生甚莫事了?我的程序为啥又报错了!
  5. java数组复制用for_在JavaScript中复制数组的最快方法 - 切片与'for'循环
  6. 求叶节点带权路径长度之和
  7. 多传感器融合SLAM研究和学习专栏汇总
  8. 【es-未解决】es 报错 failed to process cluster event (put-mapping) within 30s
  9. redis持久化、内存优化、过期、LRU内存
  10. mysql数据库双机备份_MySQL数据库本地备份和双机相互备份
  11. 转:expect的基本用法 - Shell - ChinaUnix.net -
  12. windows 10 彻底卸载windows 易升
  13. Himall商城枚举帮助类EnumHelper(2)
  14. 武汉大学2018计算机考研拟录取名单,【完整版】2018年武汉大学硕士研究生考试拟录取名单...
  15. python:类基础
  16. ecu根据什么信号对点火提前角_【科普】汽车ECU现状及发展趋势
  17. 树莓派CM4开机准备开发环境
  18. 业务流程图、数据流程图、功能流程图、页面流程图
  19. (阿里妈妈)淘宝客解析淘口令获取商品ID淘宝联盟解析淘口令获取num_iid
  20. JAVA黑马程序员day7(面向对象)

热门文章

  1. 【git私服推送文件出现的问题】refusing to update checked out branch: refs/heads/master
  2. CRT远程工具连接服务器CentOS
  3. VMware虚拟机与Windows文件共享
  4. 搜集访问网页历史记录软件_微软宣布OneDrive版本历史记录功能抵达Win10和macOS客户端版...
  5. ❤️稀疏数组的建立与还原(建议收藏)❤️
  6. L1-062 幸运彩票 (15 分)
  7. 守护你一生-守护线程(Java)
  8. sql server insert 锁表_SQL Server的insert执行的秘密(下) 带外键的insert分析
  9. python中集合的元素可以是_python中的集合
  10. Android:使用 Intent 连接多个活动