初识FileProvider在Android N上的应用
早些时候浏览一些文章时,了解到Android从N开始不允许以file://的方式通过Intent在两个APP之间分享文件,而是通过FileProvider生成content://Uri。这就意味着如果在Android N以上的版本继续使用file://的方式分享文件,则系统会抛出异常。就个人而言,file://这种方式使用最多的就是调用系统相机拍摄照片的时候了,立马找到一部Android N以上的手机,果然以前的demo无法完成拍照。于是乎,捣鼓起来,解决掉这个问题。
跳坑过程不多说,直接上可行方案
1、定义一个FileProvider,并指定有效的文件
在AndroidManifest.xml文件中配置<provider>元素并提供相应的属性
定义一个FileProvider在/res/xml下新建provider_paths.xml文件
为FileProvider指定有效的文件2、修改拍照部分的代码
兼容Android N的拍照方案回首折磨过自己的大坑们
1、provider_paths.xml文件中未配置root-path
provider_paths.xml文件中未配置root-path,老是导致拍照功能在android N上无法实现,折腾了半天百思不得解,通过看日志这个小举措才发现应该配置root-path,否则抛出异常。
2、Intent.FLAG_ACTIVITY_NEW_TASK导致result_code始终为0
调用系统相机前设置了intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK),导致在activity里的onActivityResult()方法中的result_code始终为0,以致于拍摄的照片无法显示、处理。起初老是寻找result_code=0点多种原因,无果后还曾以为个别手机的问题,就当快无招的时候发现是Intent.FLAG_ACTIVITY_NEW_TASK的问题,去除就好了。
网友评论