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

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


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

自己应用调用相机拍照后某些手机只能在二级文件夹下找到(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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值