android n 调用相机,适配Android N相机拍照的填坑小纪

初识FileProvider在Android N上的应用

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

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

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

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

7da887399f43ab8c17dca1255e86f716.png

定义一个FileProvider

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

de5398cbf9926369e527874df1fd6cad.png

为FileProvider指定有效的文件

2、修改拍照部分的代码

b2eb36d6be1e89429d82363a72dcf7a7.png

兼容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的问题,去除就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值