长春网络推广|品牌推广|搜索排名
主页 > 常见问题 > 移动互联网 >

Android 高仿微信 获取最近刚刚拍照的缩略图 功能实现

发布时间:2015-11-02  

原理其实挺简单的,android 中文件 修改 增加 删除等等 都会在数据库里的某个表里记录下来,你需要的时候 只要迅速的去查找这个表里的值 即可得到你想要的所有信息。

实际上 如果真正理解这个表结构 你就可以做很多事情了,比如迅速找到手机里的所有mp3 文件 png 文件,统计某个类型的 文件大小等等等等。

先上一张table 表图,帮助大家理解。在data data com.android.providers.media下面 找到databases文件夹进去就可以了。有兴趣的同学可以找到media部分的源码读一下

 

复制代码
 1  /**
 2      * 实际上为了保险这个方法最好是异步去调用它这里为了演示方便就在ui线程调用了
 3      *
 4      * @param context
 5      * @return
 6      */
 7     public static String getRecentlyPhotoPath(Context context) {
 8         //这个地方利用like 和通配符 来寻找 系统相机存储照片的地方
 9         //实际上还可以做的更夸张一点,寻找所有目录下的照片 并且可以限定格式  只要修改这个通配符语句即可
10         String searchPath = MediaStore.Files.FileColumns.DATA + " LIKE '%" + "/DCIM/Camera/" + "%' ";
11         Uri uri = MediaStore.Files.getContentUri("external");
12         //这里做一个排序,因为我们实际上只需要最新拍得那张即可 你甚至可以取表里的 时间那个字段 然后判断一下 距离现在是否超过2分钟 超过2分钟就可以不显示缩略图的 微信就是2分钟之内刚拍的图片
13         //会显示 超过了就不显示,这里主要就是看对表结构的理解 
14         Cursor cursor = context.getContentResolver().query(
15                 uri, new String[]{MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.SIZE}, searchPath, null, MediaStore.Files.FileColumns.DATE_ADDED + " DESC");
16         String filePath = "";
17         if (cursor != null && cursor.moveToFirst()) {
18             filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
19         }
20         if (!cursor.isClosed()) {
21             cursor.close();
22         }
23         return filePath;
24     }
复制代码

然后我们就可以这么调用:

1 iv.setImageBitmap(ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(getRecentlyPhotoPath(MainActivity.this))

当然了 对media 有过了解的同学 应该知道 摄像头在拍完照片或者视频的时候 会把照片的缩略图和视频第一帧的缩略图 也保存起来。只不过是在隐藏文件夹下面 我们多数人都看不到而已。

所以这里我们还做了一遍算缩略图的操作的话 实际上是废操作。效率不高。下面这个方法更高效。先找到你要的那个图片的id 然后去缩略图表里 直接找到缩略图即可!省略了算缩略图的步骤!

 

复制代码
 1  public static String getRecentlyPhotoId(Context context) {
 2         String searchPath = MediaStore.Files.FileColumns.DATA + " LIKE '%" + "/DCIM/Camera/" + "%' ";
 3         Uri uri = MediaStore.Files.getContentUri("external");
 4         Cursor cursor = context.getContentResolver().query(
 5                 uri, new String[]{MediaStore.Files.FileColumns._ID}, searchPath, null, MediaStore.Files.FileColumns.DATE_ADDED + " DESC");
 6         String filePath = "";
 7         if (cursor != null && cursor.moveToFirst()) {
 8             //看这里我们取id了
 9             filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
10         }
11         if (!cursor.isClosed()) {
12             cursor.close();
13         }
14         return filePath;
15     }
复制代码

然后调用:

1 //拿到id以后就可以直接找缩略图本身了
2                 iv.setImageBitmap(MediaStore.Images.Thumbnails.getThumbnail(MainActivity.this.getContentResolver(), Long.parseLong(getRecentlyPhotoId(MainActivity.this)), MediaStore.Images.Thumbnails.MICRO_KIND, new BitmapFactory.Options()));

 

代码比较简单 直观 就不多分析了。

过去一提互联网,大部分人指的就是浏览器。网页当时就代表了互联网,就是平台,而不是PC操作系统。人们给网页创造的服务远多于为Window或者MacOS。 桌面互联 - 移动互联:OS紧握命运咽喉 随着浏览器之争的硝烟慢慢平息,浏览器逐渐成为了一个中立的平台。浏
网站资料清单点击下载
DRY原则 不要重复(Dont repeat yourself)程序设计中一个最根本的原则就是要避免重复。许多编程结构(比如循环、函数、类等)的存在就是为了避免重复。一旦重复(例如,一个长表达式,一系列语句,相同的概念)的话,就会创建一个新的抽象。 抽象原则 每个
一、 Xshell Xftp 免费软件Xshell和Xftp都是 NetSarang 出品的优秀网络管理、安全传输工具。Xshell 是一个免费的安全终端仿真器,可以作为 SSH、TELNET 或 RLOGIN 的终端模拟,能够从 Windows 平台安全连接 Linux 服务器,Xftp 则是安全传输客户端,支持 FTP
1,都是网站权重惹的祸 搜索引擎眼中的权重说白了就是人类眼中的权威度。同一句话在不同的两个人口中说出来产生的效果是不一样的。这就好比你网站发布一条新闻和新浪上发布一条新闻所产生的影响力是不可同日而语的。每个站长都明白,权重越高的网站一般文章
要做好网站优化,懂得合理布局网站关键词很重要。而我们平时写网站优化方案或是开始新站的网站优化,可以先从合理布局网站关键词开始。今天上海seo和大家谈网站关键词如何布局定位。 网站每个页面的等级权重不同,决定了不同页面打分关键词定位有所不同。因
三联网络工作室
三联,专业全网推广,网站建设、指定关键词首页排名、全网营销推广三大服务,致力于帮助中国2000多万家中小企业不再为推广而烦恼。
联系我们
177-6777-3487
Copyright © 2008 - 2018 ccslweb.com. All Rights Reserved 吉ICP备15003410号-1
三联QQ客服
QQ咨询