MediaScanner生成及保存thumbnail的方式

2023-11-12

转自:http://blog.csdn.net/qikaibinglan/article/details/6130589

本文简单研究一下MediaScanner生成及保存thumbnail的方式,并给出代码快速查询图片的thumbnail,


1. 手动执行Dev Tools /Media Scanner,或插入SD卡的时候,会启动MediaScannerService,把媒体文件更新到media数据库,

如果是图片文件会同时生成thumbnail

这部分代码在 packages/providers/MediaProvider

2. 数据库中图片及thumbnail的表结构

adb shell进入目录 /data/data/com.android.providers.media/databases

可以看到两个数据库internal.db external-xx.db,其中external.db中保存着sd卡中的媒体信息

我们用sqlit查看一下 

sqlite3 external-xx.db

.table

可以看到有很多媒体文件相关的表,我们需要关心images跟thumbnails这个表

images表结构:

view plaincopy to clipboardprint?
images (_id INTEGER PRIMARY KEY,_data TEXT,_s 
ize INTEGER,_display_name TEXT,mime_type TEXT,title TEXT,date_added INTEGER,date 
_modified INTEGER,description TEXT,picasa_id TEXT,isprivate INTEGER,latitude DOU 
BLE,longitude DOUBLE,datetaken INTEGER,orientation INTEGER,mini_thumb_magic INTE 
GER,bucket_id TEXT,bucket_display_name TEXT) 


thumbnails表结构:

view plaincopy to clipboardprint?
thumbnails (_id INTEGER PRIMARY KEY,_ 
data TEXT,image_id INTEGER,kind INTEGER,width INTEGER,height INTEGER) 


我们看一下在我的模拟器上实际的数据:

select * from images;

view plaincopy to clipboardprint?
4|/mnt/sdcard/Android/1289887991860.jpg|40449|1289887991860.jpg|image/jpeg|12898 
87991860|1290054484|1290064872||||||1290064872000|0|-5876966875320966333|1801299 
020|Android 
8|/mnt/sdcard/20101126062805_hahaha.bmp|65590|20101126062805_hahaha.bmp|image/x- 
ms-bmp|20101126062805_hahaha|1290752887|1290752885||||||1290752885000||536666747 
8445081544|-1595679508|sdcard 
9|/mnt/sdcard/20101126064005_20101126062805_hahaha.bmp|65590|20101126064005_2010 
1126062805_hahaha.bmp|image/x-ms-bmp|20101126064005_20101126062805_hahaha|129075 
3607|1290753606||||||1290753606000||2418262411059016544|-1595679508|sdcard 


select * from thumbnails;

view plaincopy to clipboardprint?
4|/mnt/sdcard/DCIM/.thumbnails/1290054484766.jpg|4|1|400|300 
6|/mnt/sdcard/DCIM/.thumbnails/1290752887313.jpg|8|1|128|128 
7|/mnt/sdcard/DCIM/.thumbnails/1290753608349.jpg|9|1|128|128 


3. 现在可以看到sd卡下面的 DCIM/.thumbnails目录做什么用了,MediaScanner把生成的thumbnail放到这里,

并在数据库中来维护thumbnail跟图片的对应关系:

images表中第一列是图片的id, 对应的thumbnail表中的image_id项

images表中第二列式图片的路径,thumbnail表中第二列是thumbnail的路径

4. 从这个结果我们可以这样来查询某张图片的thumbnail (我自己想的,或许有更好的方法)

当前文件路径 ---> 查询images表得到 _id ---> 用 _id = image_id查询thumbnials表 得到thumbnial 的路径

5. 根据文件路径file_path的到_id:

view plaincopy to clipboardprint?
String[] projection2 = { 
"_id", 
//"_data" 
}; 
Uri uri2 = MediaStore.Images.Media.getContentUri("external"); 
String where = String.format( 
"_data = '%s' ", 
file_path); 
Cursor c2 = Media.query(getContentResolver(), uri2, 
projection2, where , null); 
long image_id = c2.getLong(c2.getColumnIndexOrThrow("_id")); 


6. 根据image_id查询thumbnail路径

view plaincopy to clipboardprint?
String[] projection = { 
"_data" , 
//"image_id" 
}; 


Cursor c = Thumbnails.queryMiniThumbnail(getContentResolver(), image_id, 
Thumbnails.MINI_KIND, projection); 


thumbnail_path = c.getString(c.getColumnIndexOrThrow("_data")); 



7. 这样就从当前文件得到了对应的thumbnail,前提是MediaScanner帮你扫描过了,当然你也可以在代码中自己启动扫描

然后把thumnail路径传递给你用来显示的ImageView就可以了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MediaScanner生成及保存thumbnail的方式 的相关文章

  • View系列 (三) — Measure 流程详解

    Measure 流程详解 一 概述 二 单一 View 的测量流程 1 流程图 2 源码分析 三 ViewGroup 的测量流程 1 流程图 2 源码分析 一 概述 测量过程分为 View的measure过程 和 ViewGroup的mea
  • android之媒体硬解OMX的实现

    转自 http blog csdn net vincent blog article details 7578112 android的多媒体部分采用的编解码标准是OMX 当然这个标准是用于硬件编解码的 软件编解码在这里我就不说了 直接从st
  • android 启动过程分析

    Servicemanager需要先启动 zygote后面的service需要用到servicemanager的服务
  • 《Linux设备节点创建》用户空间ueventd创建设备节点规则

    转自 http blog csdn net tankai19880619 article details 11726371 说明 本文基于Android2 3和Linux2 6 其余版本仅供参考 一 devfs udev和sysfs是什么关
  • Activity启动流程源码分析-浅析生命周期函数

    源码分析 接着上一篇 Activity启动流程源码分析 setContentView源码阅读 的讲解 本节介绍一下Activity的生命周期函数何时被调用 要看Activity的生命周期函数何时被调用 不得不翻阅 ActivityThrea
  • android 系统级应用和服务的启动流程

    activityManagerService java 1 systemRaady 收到systemReady 通知 2 AppGlobals getPackageManager getPersistentApplications STOC
  • http://blog.csdn.net/haomcu/article/details/7267090

    转自 http blog csdn net haomcu article details 7267090 一 Android平台Wifi的基本代码路径 1 Wpa supplicant源码部分 external wpa supplicant
  • 为什么ViewGroup的onDraw()方法不执行

    问题 ViewGroup onDraw不执行的原因 怎么让ViewGroup onDraw执行 android代码一直在优化 我看了几个版本的源码 目前 我用的是API30的源码 再去看ViewGroup为什么不走onDraw 的时候 已经
  • 1-APP启动源码分析-1

    桌面app也就是我们认识的launcher app 点击app icon启动到app内部的过程分为2种情况 一种是冷启动 一种叫热启动 冷启动 系统没有创建过app的进程 也就是后台没有此app进程 所以冷启动系统会创建一个新的进程分配给a
  • Python+uiautomator2手机UI自动化测试实战 --1. 环境搭建

    转自 https blog csdn net ricky yangrui article details 81414870 一 简介 uiautomator2是一个python库 用于Android的UI自动化测试 其底层基于Google
  • Android apk安装管理(PackageManagerService 分析)

    Android apk安装管理 PackageManagerService 分析 本篇主要分析了系统启动阶段包管理服务的启动流程 其中的几个接口在apk安装时也会被调用 包管理服务启动时主要做的工作大致有如下几方面 1 建立java层的in
  • Activity启动流程

    简述 Activity 启动分为两种 1 Activity中通过startActivity 方法启动一个Activity 2 从桌面通过点击应用图标启动一个App然后显示Activity 我们通过第二点来分析 更全面一点 先走一波流程图 以
  • Android Display System --- Surface Flinger

    转自一醉千年大大 http blog csdn net yili xie archive 2009 11 12 4803527 aspx SurfaceFlinger 是Android multimedia 的一个部分 在Android 的
  • Android源码分析 - Service启动流程

    开篇 本篇以android 11 0 0 r25作为基础解析 在之前的文章中 我们已经分析过了四大组件中Activity和ContentProvider的启动流程 这次我们就来讲讲四大组件之一的Service是如何启动和绑定的 流程图 在查
  • MediaScanner生成及保存thumbnail的方式

    转自 http blog csdn net qikaibinglan article details 6130589 本文简单研究一下MediaScanner生成及保存thumbnail的方式 并给出代码快速查询图片的thumbnail 1
  • android MediaPlayer 中的JNI总结

    1 在android media MediaPlayer cpp 中 定义fields静态变量 里面有两个重要的成员变量 context 用来保存创建的mediaplayer post event 用来将JNI层的事件回调给JAVA层 实现
  • Android TabLayout setupWithViewPager()方法绑定Viewpager不显示文字

    setupWithViewPager 做了什么事情 TabLayout tabLayout findViewById R id tabLayout ViewPager viewPager findViewById R id viewPage
  • Dalvik虚拟机简要介绍和学习计划

    通过修改 android framework base core jni AndroidRuntime cpp 中的 property get dalvik vm heapsize heapsizeOptsBuf 4 16m 来修改 dal
  • android 中的的 sp/wp/RefBase

    转自 http blog csdn net innost article details 6752443 5 1 概述 初次接触Android源码时 见到最多的一定是sp和wp 即使你只是沉迷于Java世界的编码 那么Looper和Hand
  • android recovery 系统代码分析【精】

    转自 http blog csdn net andyhuabing article details 9226569 http blog csdn net andyhuabing article details 9248713 最近做Reco

随机推荐

  • 驱动模块Makefile解析

    作者 王劲南 华清远见嵌入式学院讲师 先看一下代码 ifeq KERNELRELEASE KERNELDIR home linux linux 2 6 22 6 PWD shell pwd modules MAKE C KERNELDIR
  • 读书笔记:《人工智能》

    读书笔记 摘自 人工智能 作者 李开复 王咏刚 第一章 人工智能来了 人工智能已经来了 而且它就在我们身边 几乎无处不在 人类 你好 不管我们是碳基人类还是硅基机器人 都没有本质的区别 我们中的每一员都应获得应有的尊重 每当前沿科技取得重大
  • 通过木马程序rootkit隐蔽行踪-创建root用户都删除不了的木马文件

    前沿 实战1 通过rootkit留后门 1 通过rootkit提权 2 通过rootkit隐藏木马进程号 3 通过rootkit隐藏木马文件 实战2 创建一个root用户 都删除不了的木马文件 实验环境 服务端 63 cn IP 192 1
  • 零代码实现接口自动化测试-RF框架实践

    robotframework是一款关键字自动化测试框架 可能做各种类型的自动化测试 本文介绍通过 robotframework 来实现接口测试 安装接口请求的第三方库 pip install robotframework requests
  • Unity入门03——Unity脚本

    1 脚本基本规则 1 设置编程用工具 2 基本规则 1 创建规则 不在VS中创建脚本了 可以放在Assets文件夹下的任何位置 建议同一文件夹管理 类名和文件名必须一致 不然不能挂载 因为反射机制创建对象 会通过文件名去找Type 建议不要
  • 晶圆价格计算

    昨天和一个朋友聊天 朋友提及到如果自己做芯片 成本大约为2 3元人民币 今天正好朋友圈有朋友转发此类文章 https mp weixin qq com s biz MzA4ODMwNTMxNg mid 400134208 idx 1 sn
  • download-git-repo报错128

    参考链接https segmentfault com q 1010000012493731
  • OC消息机制

    目录 1 OC消息机制 2 OC消息发送 3 OC动态方法解析 4 OC消息转发 1 OC消息机制 OC对象调用方法在编译阶段不知道具体的方法在哪里 是在运行的过程中 向对象发送消息 通过对象得到函数地址 调用函数 如果没有找到 则抛出异常
  • 在geany编辑器中编写中文注释

    在代码的开头加入 coding utf 8 这个是解析文件使用的是 utf 8 编码 完整支持多个语种 例如 coding utf 8 将整数使用str 进行字符串转换 age 23 message Happy str age rd Bir
  • 【MATLAB第47期】基于MATLAB的多卷积层的卷积神经网络MCNN分类预测模型,含交叉验证,可自定义层数

    MATLAB第47期 基于MATLAB的多卷积层的卷积神经网络MCNN分类预测模型 含交叉验证 可自定义层数 一 展示效果 依次对比卷积层数为1 2 3时的分类预测结果 可得出 随着卷积层数量增加 训练集 测试集正确率基本上得到改进 1 一
  • vue报错:Failed to resolve directive: modle

    问题原因 我把model写成了modle
  • SQL利用存储过程一次插入多条数据

    创建存储过程 可自行扩展ID不存在时为新增 否为修改 create PROCEDURE dbo p Company Insert CompanyCollection CompanyTableType READONLY AS INSERT I
  • linux shell字符串截取总结

    一 字符串变量的截取操作 对字符串变量的截取操作一般都是通过 操作符 的方式进行 如下 1 从指定位置 index 截取固定长度 格式 string start length 其中 string 是要截取的字符串 start 是起始位置 下
  • 16.4 线性DP练习——【字符串转换】

    文章目录 题目描述 输入描述 输出描述 输入输出样例 最终代码c c 过程理解 题目描述 小蓝拥有两个字符串S T 他希望通过如下操作使得字符S转换为字符串T 操作有一下三种 删除一个字符 插入一个字符 将一个字符改为另一个字符 问最少需要
  • 2022广州站小计

    大半夜睡不着 写个游记 队伍战绩 四题铜首 这场是相当罚做 也说不清楚是出题人的问题还是我的问题 大概率是我的 第一题 看了一眼题目 排列组合 没推出样例 主要是读题也没读出队伍不为空 索性扔给队友了 第二题 还是没读明白 所以自己不敢上手
  • 即将换到一个自己不熟悉的部门做领导,应该怎么办

    楼主 跳动的时间 时间 2008 11 09 22 14 00 点击 1861 回复 16 我现在在公司的一个部门做经理 在这个职位上已经做了3年多了 因为自己在现有岗位的工作业绩突出 领导十分赏识 最近决定把我调到另外一个部门做总经理 我
  • 现在,您可以在白板尽情挥洒了!

    WEBCHAT在全国率先推出了可以画画的聊天室 即带有白板功能的群 不过原来它只能支持发送简单图形 而现在经过WEBCHAT开发组成员的努力 这个扫兴的bug被攻克了 这就意味着 您可以在白板尽情挥洒了
  • PhpStorm软件安装包分享(附安装教程)

    目录 一 软件简介 二 软件下载 一 软件简介 PhpStorm是一款由JetBrains开发的专业PHP集成开发环境 IDE 旨在提供全面的PHP开发支持 它是基于IntelliJ IDEA平台构建的 具有强大的功能和工具 可以帮助开发人
  • python-绘制双轴柱状图

    转载 https blog csdn net weixin 42749944 article details 115026810 df pd read excel r file xlsx fig ax1 plt subplots width
  • MediaScanner生成及保存thumbnail的方式

    转自 http blog csdn net qikaibinglan article details 6130589 本文简单研究一下MediaScanner生成及保存thumbnail的方式 并给出代码快速查询图片的thumbnail 1