适配Android N相机拍照的填坑小纪

初识FileProvider在Android N上的应用

      早些时候浏览一些文章时,了解到Android从N开始不允许以file://的方式通过Intent在两个APP之间分享文件,而是通过FileProvider生成content://Uri。这就意味着如果在Android N以上的版本继续使用file://的方式分享文件,则系统会抛出异常。就个人而言,file://这种方式使用最多的就是调用系统相机拍摄照片的时候了,立马找到一部Android N以上的手机,果然以前的demo无法完成拍照。于是乎,捣鼓起来,解决掉这个问题。

跳坑过程不多说,直接上可行方案

1、定义一个FileProvider,并指定有效的文件

       在AndroidManifest.xml文件中配置元素并提供相应的属性

适配Android N相机拍照的填坑小纪_第1张图片
定义一个FileProvider

       在/res/xml下新建provider_paths.xml文件

为FileProvider指定有效的文件

2、修改拍照部分的代码

适配Android N相机拍照的填坑小纪_第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的问题,去除就好了。

你可能感兴趣的:(适配Android N相机拍照的填坑小纪)