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

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

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

自己应用调用相机拍照后某些手机只能在二级文件夹下找到(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 条评论
登录 后参与评论

相关文章

来自专栏移动端开发

iOS 视频播放方式整理

初衷 ----       多媒体这整个系列的文章自己也准备好开始整理了,先从视频音频最简单也是最常用的播放出发慢慢的往下深究,探索到底层的编码解码等等,这篇文...

84010
来自专栏前端知识铺

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

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

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

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

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

4567
来自专栏数据小魔方

Xcelsius(水晶易表)系列17——动态地图应用

本节教程非常简单,一个美国地图同时作为数据呈现与选择器,控制统计图呈现各州的对应时间段的税收数额指标。 案例截图如下: ? 数据文件如下: ? 简要分析下数据...

3059
来自专栏软件开发

最全前端资源汇总

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

1.5K10
来自专栏iOS开发日记

六个方向关于iOS100个面试题,你都会了吗?

请概括一下你在构建iOS应用时的测试过程。iOS应用如何实现对其他语言、日期格式以及货币单位的支持?

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

100 行代码写一个手机AR

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

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

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

5388
来自专栏数据小魔方

数据透视图|切片器与日程表

今天教大家使用excel中的数据透视图——切片器与日程表! excel自2010版之后,加入了切片器与日程表功能,这两个小功能是数据筛选的利器,但是只能在数据透...

4289
来自专栏CSDN技术头条

Mozilla将会在Firefox 48版本中引入Rust Component

Mozilla近日宣布,将会在Firefox的正式版中首次引入Rust代码。而该版本(Firefox 48)将于在2016年8月2日发布。 Rust是一种可以更...

2275

扫码关注云+社区

领取腾讯云代金券