调用系统相机拍照,并且保存到系统相册的一般套路

最近遇到也一个需求:调用系统相机拍照,并且照片可以在系统相册显示。 关于照片显示在系统相册这个问题,因为安卓机型太多了,各大厂商都对原生系统进行了不同程度的定制,所以在一般情况下,有的手机会把图片直接显示在相册最前方,但是有的手机却只能在二级文件夹内找到我们拍的照片,两张情况如下图所示:

微信拍摄的照片直接显示最前

自己应用调用相机拍照后某些手机只能在二级文件夹下找到(aaaaaa)

那么问题来了,微信,qq等它们是怎么实现将本应用拍的照片显示在系统相册最前方,而不用再往二级文件夹查找呢?

这个问题我和朋友们讨论之后觉得最有可能的原因就是手机系统对这些App进行了特殊处理,为了验证这个想法,我做了一个实验。

为了验证微信的图片路径是否被“特殊处理”了做的实验:

  1. 首先找到微信图片在本机的存储路径,我的手机是小米5,所以它的路径是:sd卡根目录+/Tencent/MicroMsg/WeiXin/;
  2. 在自己的demo中调用系统相机拍照,并且设置拍照后的图片保存路径为上一步中的路径,文件名为当前系统时间。
String name = System.currentTimeMillis() + ".jpg";
imagePath = new File(rootPath + "/Tencent/MicroMsg/WeiXin/", name);
if (!imagePath.exists()) {   
 imagePath.mkdirs();
}
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imagePath));//设置拍照后图片的保存路径

3.拍照后发现,原本放到aaaaaa路径的话,图片不会显示在最前方,但是当我们把图片的保存位置设置为微信图片的保存路径后,会正常显示在相册最前方。

---------------------------------------------------我是分割线-------------------------------------

下面记录下实现调用相机拍照并保存的一种方法。

1 . 添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />

2 . 拍照的意图

Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
String name = System.currentTimeMillis() + ".jpg";
imagePath = new File(rootPath + "/aaaaaa/", name);
if (!imagePath.exists()) {    imagePath.getParentFile().mkdir();
}
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imagePath));// 设置图片输出路径
imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // 图片质量

3 . 拍照成功后在onActivityResult通知图库刷新

try {    
MediaStore.Images.Media.insertImage(getContentResolver(), imagePath.getAbsolutePath(), imagePath.getName(), null);//图片插入到系统图库
}catch (FileNotFoundException e) {    
e.printStackTrace();
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + imagePath.getAbsolutePath())));//通知图库刷新

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

20个为前端开发者准备的文档和指南

1.Keyboard Event Viewer(键盘事件可视器) 它是一个可配置的交互式的工具,可以让你观察键盘事件的数据,它可以像在UI事件说明书里显示离线的...

44013
来自专栏前端知识铺

入口文件开始,分析Vue源码实现

网上现有的Vue源码解析文章一搜一大批,但是为什么我还要去做这样的事情呢?因为觉得纸上得来终觉浅,绝知此事要躬行。

36612
来自专栏小古哥的博客园

微信小程序-实战巩固(二)

刚刚写了小程序入门没几天,小程序就开放个人开发者资格,感觉为我而来啊 \(≧▽≦)/。迫不及待的去注册,准备将之前的处女作传上去体验一把,结果卡在了服务器配置上...

4177
来自专栏九彩拼盘的叨叨叨

web前端网站收藏

4832
来自专栏web编程技术分享

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第一节)

4238
来自专栏葡萄城控件技术团队

程序员Web面试之前端框架等知识

基于前面2篇博客: ? 程序员Web面试之jQuery 程序员Web面试之JSON 您已经可以顺利进入Web开发的大门。 但是要动手干,还需要了解一些已有的前端...

2105
来自专栏星流全栈

Announcing Vue.js 2.0

1044
来自专栏每日一篇技术文章

100 行代码写一个手机AR

Step-1.实现两个协议 1.AVCaptureMetadataOutputObjectsDelegate 2.UINavigationControlle...

952
来自专栏软件开发

最全前端资源汇总

一、概要 这份汇总整理,很程度上参考了GitHub最全前端资源汇总;云集前端教程、开发资源、免费书籍、手册规范、求职面试等等,旨在为前端学习 & 技能提升提供方...

9719
来自专栏ytkah

ios设备突破微信小视频6S限制的方法

  刷微信朋友圈只发文字和图片怎能意犹未竟,微信小视频是一个很好的补充,音视频到位,流行流行最流行。但小视频时长不能超过6S,没有滤镜等是很大的遗憾。but有人...

2797

扫码关注云+社区