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

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

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

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

相关文章

来自专栏星流全栈

Announcing Vue.js 2.0

1104
来自专栏HTML5学堂

HTML5征程前的准备工作

HTML5学堂:在开启学习HTML5知识之前,一些知识是需要掌握的。推荐在正式学习HTML5的知识之前把如下罗列出的任务搞定。良好的基础知识能够让日后对专业知识...

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

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

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

2295
来自专栏数据小魔方

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

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

3859
来自专栏CSDN技术头条

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

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

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

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

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

web前端网站收藏

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

100 行代码写一个手机AR

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

1272
来自专栏java技术学习之道

史上最全的前端资源大汇总

7666
来自专栏Nian糕的私人厨房

Vue2.0 歌手数据获取及排序

本次的系列博文的知识点讲解和代码,主要是来自于 黄轶 在慕课网的 Vue 2.0 高级实战-开发移动端音乐WebApp 课程,由个人总结并编写,其代码及知识点...

733

扫码关注云+社区