美文网首页
委托相机应用拍照学习笔记

委托相机应用拍照学习笔记

作者: 栩檬 | 来源:发表于2021-04-19 15:06 被阅读0次

问题

在一个 Activity 中,放置一个按钮 Button 和图像视图 ImageView 组件。期望点击按钮后委托系统已经存在的相机应用拍照,完成后在 ImageView 中显示拍摄的照片,怎样实现?

回答

Android 应用开发官网的开发指南给出了两种方案,都有十分详尽的指导,本文侧重于记述个人的学习经验,不再赘述。
方案一:不给出图片的保存位置,拍照完成后将图片通过 onActivityResult() 方法的 Intent data 参数传递回来。
方案二:给出图片的保存位置,拍照完成后保存到指定位置。在 Activity 中根据图片路径获取图片(由于图片的位置是由 Activity 给拍照应用的,所以事先知道照片的路径)。

说明

  1. 指南中指出通过方案一获取的只是拍照后图片的缩略图,如果有剪裁之类的图片处理需求,应该采用方案二。
  2. 我在对照指导文档写方案二代码的时候,遇到了如下错误:

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/pers.xumeng.androidstudy/files/Pictures/JPEG_20210420_135351_5652778187316939995.jpg

res/xml/file_paths.xml 中配置的路径,初始写法如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <external-files-path
      name="my_images"
      path="Android/data/pers.xumeng.androidstudy/files/Pictures" />
</paths>

查阅资料后,了解到 external-files-path 本身就代表着 /storage/emulated/0/Android/data/<package_name>/files 路径,上面的写法,对应的实际路径为 external-files-path 代表的部分拼上 path 的部分:

/storage/emulated/0/Android/data/<package_name>/files/Android/data/pers.xumeng.androidstudy/files/Pictures

所以,Failed to find configured root that contains ... (找不到配置的包含...的根) 也就可以理解了。所以 path 的正确写法如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
  <external-files-path
      name="my_images"
      path="/Pictures" />
</paths>

另外,我在写这篇文章时查阅了开发指南的英文版本,结果发现英文版中path 的写法和我修改之后的类似。估计是这个文档错误在英文版中已经修正了,但是中文版还没更新吧。


开发指南英文版截图.png
开发指南中文版截图.png

测试设备参数

操作系统:MIUI 12.0.4 稳定版 (Android 10)

参考资料

FileProvider 路径配置策略的理解

测试代码

https://github.com/XuMeng-0/android-study

相关文章

网友评论

      本文标题:委托相机应用拍照学习笔记

      本文链接:https://www.haomeiwen.com/subject/iktnlltx.html