Android 高仿微信 获取最近刚刚拍照的缩略图 功能实现
原理其实挺简单的,android 中文件 修改 增加 删除等等 都会在数据库里的某个表里记录下来,你需要的时候 只要迅速的去查找这个表里的值 即可得到你想要的所有信息。
实际上 如果真正理解这个表结构 你就可以做很多事情了,比如迅速找到手机里的所有mp3 文件 png 文件,统计某个类型的 文件大小等等等等。
先上一张table 表图,帮助大家理解。在data data com.android.providers.media下面 找到databases文件夹进去就可以了。有兴趣的同学可以找到media部分的源码读一下

/**
* 实际上为了保险这个方法最好是异步去调用它这里为了演示方便就在ui线程调用了
*
* @param context
* @return
*/
public static String getRecentlyPhotoPath(Context context) {
//这个地方利用like 和通配符 来寻找 系统相机存储照片的地方
//实际上还可以做的更夸张一点,寻找所有目录下的照片 并且可以限定格式 只要修改这个通配符语句即可
String searchPath = MediaStore.Files.FileColumns.DATA + " LIKE '%" + "/DCIM/Camera/" + "%' ";
Uri uri = MediaStore.Files.getContentUri("external");
//这里做一个排序,因为我们实际上只需要最新拍得那张即可 你甚至可以取表里的 时间那个字段 然后判断一下 距离现在是否超过2分钟 超过2分钟就可以不显示缩略图的 微信就是2分钟之内刚拍的图片
//会显示 超过了就不显示,这里主要就是看对表结构的理解
Cursor cursor = context.getContentResolver().query(
uri, new String[]{MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.SIZE}, searchPath, null, MediaStore.Files.FileColumns.DATE_ADDED + " DESC");
String filePath = "";
if (cursor != null && cursor.moveToFirst()) {
filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
}
if (!cursor.isClosed()) {
cursor.close();
}
return filePath;
}
然后我们就可以这么调用:
iv.setImageBitmap(ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(getRecentlyPhotoPath(MainActivity.this))
当然了 对media 有过了解的同学 应该知道 摄像头在拍完照片或者视频的时候 会把照片的缩略图和视频第一帧的缩略图 也保存起来。只不过是在隐藏文件夹下面 我们多数人都看不到而已。
所以这里我们还做了一遍算缩略图的操作的话 实际上是废操作。效率不高。下面这个方法更高效。先找到你要的那个图片的id 然后去缩略图表里 直接找到缩略图即可!省略了算缩略图的步骤!
public static String getRecentlyPhotoId(Context context) {
String searchPath = MediaStore.Files.FileColumns.DATA + " LIKE '%" + "/DCIM/Camera/" + "%' ";
Uri uri = MediaStore.Files.getContentUri("external");
Cursor cursor = context.getContentResolver().query(
uri, new String[]{MediaStore.Files.FileColumns._ID}, searchPath, null, MediaStore.Files.FileColumns.DATE_ADDED + " DESC");
String filePath = "";
if (cursor != null && cursor.moveToFirst()) {
//看这里我们取id了
filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
}
if (!cursor.isClosed()) {
cursor.close();
}
return filePath;
}
然后调用:
//拿到id以后就可以直接找缩略图本身了
iv.setImageBitmap(MediaStore.Images.Thumbnails.getThumbnail(MainActivity.this.getContentResolver(), Long.parseLong(getRecentlyPhotoId(MainActivity.this)), MediaStore.Images.Thumbnails.MICRO_KIND, new BitmapFactory.Options()));
代码比较简单 直观 就不多分析了。
Android 高仿微信 获取最近刚刚拍照的缩略图 功能实现的更多相关文章
- android高仿微信拍照、多选、预览、删除(去除相片)相冊功能
先声明授人与鱼不如授人与渔,仅仅能提供一个思路,当然须要源代码的同学能够私下有偿问我要源代码:QQ:508181017 工作了将近三年时间了,一直没正儿八经的研究系统自带的相冊和拍照,这回来个高仿微信 ...
- Android 高仿微信实时聊天 基于百度云推送
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百 ...
- Android 高仿微信即时聊天 百度云为基础的推
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天最终有幸利用百 ...
- Android 高仿微信6.0主界面 带你玩转切换图标变色
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41087219,本文出自:[张鸿洋的博客] 1.概述 学习Android少不了模仿 ...
- Android高仿微信(一)——如何消除启动时的白屏
默认情况下,APP启动时会先把屏幕刷成白色,然后才绘制第一个Activity中的View,这两个步骤之间的延迟会造成启动后先看到白屏(时间大概为1秒左右).时间不长,但是我们也看到,一般的APP时不存 ...
- Android 高仿微信头像截取 打造不一样的自定义控件
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/39761281,本文出自:[张鸿洋的博客] 1.概述 前面已经写了关于检测手势识别 ...
- Android 高仿微信支付键盘
现在很多app的支付.输入密码功能,都已经开始使用自定义数字键盘,不仅更加方便.其效果着实精致. 下面带着大家学习下,如何高仿微信的数字键盘,可以拿来直接用在自身的项目中. 先看下效果图: 1. 自定 ...
- Android 高仿微信语音聊天页面高斯模糊效果
目前的应用市场上,使用毛玻璃效果的APP随处可见,比如用过微信语音聊天的人可以发现,语音聊天页面就使用了高斯模糊效果. 先看下效果图: 仔细观察上图,我们可以发现,背景图以用户头像为模板,对其进行了高 ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
随机推荐
- BZOJ 1008: [HNOI2008]越狱 快速幂
1008: [HNOI2008]越狱 Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生 ...
- Spark源码分析(一)-Standalone启动过程
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3858065.html 为了更深入的了解spark,现开始对spark源码进行分析,本系列文章以spark ...
- CentOS系统安装JDK
使用yum安装 1.查看yum库是否有java安装包 yum -y list java* 2.安装jdk yum -y install java-1.8* 3.安装完成后,执行java -versi ...
- Bootstrap下拉菜单dropdown-menu
1.步骤 (1)要做为下拉菜单的li增加class="dropdown" (2)为li中文字添加超链接<a data-toggle="dropdown" ...
- mysql C api
1.初始化一个链接结构. 2.创建一个链接. 3.执行查询. 4.关闭链接. MYSQL* conn; 首先,声明一个conn指针指向一个MYSQL结构体,这个结构体就是一个数据库连接句柄. conn ...
- DB2基本操作
--重启数据库 FORCE APPLICATION ALL DB2STOP DB2START --创建数据库 CREATE DATABASE mysdedb USING CODESET UTF-8 T ...
- iOS:Autolayout自动布局实例
Autolayout自动布局实例即可以用故事板布局,也可以用纯代码创建,各有各的优点:用故事板布局,比较方便,而且直观,可以很直白的看到视图布局后的变化:采用代码布局,虽然代码比较多,有些麻烦,但是可 ...
- Linux命令-tar
tar命令用于对文件打包压缩或解压 格式:tar [选项 -C 指定解压到的目录] [文件] 打包并压缩文件: tar -zcvf 压缩包名.tar.gz 文件名 解压并展开压缩包 tar -zxvf ...
- JBOSS集群技术升级版解决方案分享(图示篇)
JBOSS集群技术升级版解决方案分享(实现篇) 前段时间,由于阿堂一直较忙,没有写点什么了,有空时一直在关注"web架构和性能,高并发,Cache层"技术领域的 ...
- .NET 压缩解压库发布,支持进度查看
刚发布了一个 .net压缩解压库,基于SharpZipLib开发 ,支持进度查看,支持路径保持与否. CL.IO.Zip 是一个基于SharpZipLib的一个压缩和解压的类库,提供给用户在.net环 ...