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

本文介绍了在Android N及以上版本中,由于系统不允许使用file://方式分享文件,而需要改用FileProvider生成content:// Uri来实现跨应用文件分享。作者通过实例详细讲述了如何配置AndroidManifest.xml,创建provider_paths.xml文件,并调整拍照代码以适配Android N的拍照功能。在解决问题的过程中,提到了provider_paths.xml配置不当和Intent.FLAG_ACTIVITY_NEW_TASK可能导致的问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识FileProvider在Android N上的应用

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

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

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

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

b64c9fd18ee7

定义一个FileProvider

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

b64c9fd18ee7

为FileProvider指定有效的文件

2、修改拍照部分的代码

b64c9fd18ee7

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值