前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >调用系统相机拍照,并且保存到系统相册的一般套路

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

作者头像
coderZhen
发布2018-06-28 16:26:29
1.1K0
发布2018-06-28 16:26:29
举报
文章被收录于专栏:Android开发经验Android开发经验

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

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

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

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

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

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

  1. 首先找到微信图片在本机的存储路径,我的手机是小米5,所以它的路径是:sd卡根目录+/Tencent/MicroMsg/WeiXin/;
  2. 在自己的demo中调用系统相机拍照,并且设置拍照后的图片保存路径为上一步中的路径,文件名为当前系统时间。
代码语言:javascript
复制
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 . 添加权限

代码语言:javascript
复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />

2 . 拍照的意图

代码语言:javascript
复制
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通知图库刷新

代码语言:javascript
复制
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())));//通知图库刷新
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.09.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档