转自:http://www.2cto.com/kf/201309/242876.html

主要分为几节:

1. Android的媒体文件内部是如何存储的?

2. Andoid的媒体文件如何获取?

3. 在使用媒体文件的一些小技巧。

1. Android的多媒体如何存储的?

Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(internal.db),一个是存储卡数据库(external-XXXX.db)。媒体文件的操作主要是围绕着这两个数据库来进行。这两个数据库的结构是完全一模一样的。

我们先看一下这两个数据库包含了哪些表。

album_art audio search

album_info audio_genres searchhelpertitle

albums audio_genres_map thumbnails

android_metadata audio_meta video

artist_info audio_playlists videothumbnails

artists audio_playlists_map

artists_albums_map images

先从基本的分析:

Images表:主要存储images信息。可以看一下这个表的结构:

CREATE TABLE images (_id INTEGER PRIMARY KEY,_data TEXT,_size INTEGER,_display_name TEXT,mime_type TEXT,title

TEXT,date_added INTEGER,date_modified INTEGER,description TEXT,picasa_id TEXT,isprivate INTEGER,latitude DOUBL

E,longitude DOUBLE,datetaken INTEGER,orientation INTEGER,mini_thumb_magic INTEGER,bucket_id TEXT,bucket_displa

y_name TEXT);

包含了一些基本信息,其中大家一看就明白了。

Thumbnails表:这个表和images表是有直接关系的。主要存储图片的缩略图,Android为每一张保存进系统的图片文件都会自动生成一张缩略图文件。关于这一点还有一些特殊的技巧后面再讲。我们可以看一下这个表的结构:

CREATE TABLE thumbnails (_id INTEGER PRIMARY KEY,_data TEXT,image_id INTEGER,kind INTEGER,width INTEGER,height INTEGER);

每一张image对应一条thumbnail记录。

Video表:主要存储视频信息了。和images表类似。表结构如下:

CREATE TABLE video (_id INTEGER PRIMARY KEY,_data TEXT NOT NULL,_display_name TEXT,_size INTEGER,mime_type TEXT,date_added INTEGER,date_modified INTEGER,title TEXT,duration INTEGER,artist TEXT,album TEXT,resolution TEXT,description TEXT,isprivate INTEGER,tags TEXT,category TEXT,language TEXT,mini_thumb_data TEXT,latitude DOUBLE,longitude DOUBLE,datetaken INTEGER,mini_thumb_magic INTEGER, bucket_id TEXT, bucket_display_name TEXT, bookmark INTEGER);

Videothumbnails表:存储视频的缩略图信息。这个和thumbnails表类似。

Audio表:音频信息比视频信息和图片信息要稍微复杂一些,主要是存储了一些专辑(album)、歌手(artists)信息,而专辑和歌手信息是单独的表格存储的,audio其实是一个视图,真正的音频数据信息存储在audio_meta表格中。我们可以看一下audio视图的定义:

CREATE VIEW audio as SELECT * FROM audio_meta LEFT OUTER JOIN artists ON audio_meta.artist_id=artists.artist_id LEFT OUTER JOIN albums ON audio_meta.album_id=albums.album_id;

Albums表:主要存储专辑信息。

Artists表:主要存储歌手信息。不多赘述。

其他的一些表格我们平时可能用的比较少,就不做描述了,有兴趣可以自行研究一下。

2. Android的多媒体如何获取?

Android提供了媒体获取与存储的相关API,主要包含在android.provider.MediaStorepackage中。

MediaStore.Audio.AlbumColumns

Columns representing an album

MediaStore.Audio.ArtistColumns

Columns representing an artist

MediaStore.Audio.AudioColumns

Columns for audio file that show up in multiple tables.

MediaStore.Audio.GenresColumns

Columns representing an audio genre

MediaStore.Audio.PlaylistsColumns

Columns representing a playlist

MediaStore.Files.FileColumns

Fields for master table for all media files.

MediaStore.Images.ImageColumns

MediaStore.MediaColumns

Common fields for most MediaProvider tables

MediaStore.Video.VideoColumns

MediaStore

The Media provider contains meta data for all available media on both internal and external storage devices.

MediaStore.Audio

Container for all audio content.

MediaStore.Audio.Albums

Contains artists for audio files

MediaStore.Audio.Artists

Contains artists for audio files

MediaStore.Audio.Artists.Albums

Sub-directory of each artist containing all albums on which a song by the artist appears.

MediaStore.Audio.Genres

Contains all genres for audio files

MediaStore.Audio.Genres.Members

Sub-directory of each genre containing all members.

MediaStore.Audio.Media

MediaStore.Audio.Playlists

Contains playlists for audio files

MediaStore.Audio.Playlists.Members

Sub-directory of each playlist containing all members.

MediaStore.Files

Media provider table containing an index of all files in the media storage, including non-media files.

MediaStore.Images

Contains meta data for all available images.

MediaStore.Images.Media

MediaStore.Images.Thumbnails

This class allows developers to query and get two kinds of thumbnails: MINI_KIND: 512 x 384 thumbnail MICRO_KIND: 96 x 96 thumbnail

MediaStore.Video

MediaStore.Video.Media

MediaStore.Video.Thumbnails

This class allows developers to query and get two kinds of thumbnails: MINI_KIND: 512 x 384 thumbnail MICRO_KIND: 96 x 96 thumbnail

简单的观察一下,发现这些类也就是对数据库中的一些表的封装,弄懂了底层的存储结构,对于了解这些类的作用就很容易了。

Android系统中的每一种媒体文件有两种地址描述方式。

第一种模式,大家知道,在Android中,Content Provider是用来存储和获取公共数据的统一接口,Content Provider为每一类资源分配了URI地址,比如图片的地址就包括MediaStore.Images.Media.INTERNAL_CONTENT_URI和MediaStore.Images.Media.EXTERNAL_CONTENT_URI两个基础地址,其值分别是content://media/internal/images/media和content://media/external/images/media,对应内部库和外部库地址。每一张图片的地址基本上是上面的基础URL地址下加上图片的内部ID。打个比方一张存储卡上的图片ID为2,其对应的Uri地址就是content://media/external/images/media/2.知道了这个地址,基本上就可以操作这张图片的所有信息了。

另外一种描述文件地址标识就是传统的文件路径模式了,比如一张存储卡上的图片地址可能描述为:/mnt/sdcard/images/1.jpg。其实这个路径存储在images表格中的data字段中,有了这点关联,我们可以在这两种模式下进行任意切换。

前一种模式下,主要通过MediaStore.Images.Media、MediaStore.Audio.Media、MediaStore.Video.Media三个库中的query方法来查询或者获取特定条件的媒体了。

基本用法1:从一个Content Uri地址中生成Bitmap

可以采用android.provider.MediaStore.Images.Media.getBitmap(ContentResolvercr,Uriurl)方法,其中ContentResolver是应用与资源之间的衔接人,它的示例通常可以通过在Activity中调用的getContentResolver()方法中获取。Uri地址就是上面描述的content://media/external/images/media/2类似地址,也就是Content Provider定义的地址形式。

基本用法2:从一个传统地址中生成Bitmap

有时候我们只知道一张图片的路径,并不知道图片的内部地址,想去获取该图片,可以采用android.graphics.BitmapFactory中的decodeXXX方法来搞定,比如decodeFile方法就是从文件路径中读取图片,原图片可以支持jpg,png,gif,bmp等各种格式。decodeByteArray就是从字节流中解码了。最后都是转换成Bitmap格式。

基本用法3:获取一张图片的缩略图

有时候我们需要显示图片的缩略图,可以采用android.provider.MediaStore.Images.Thumbnails的getThumbnail方法。另外其实也可以采用bitmap的compress的方法对图片进行一些压缩处理。

android 多媒体数据库详解(转)的更多相关文章

  1. android 多媒体数据库详解

    主要分为几节: 1. Android的媒体文件内部是如何存储的? 2. Andoid的媒体文件如何获取? 3. 在使用媒体文件的一些小技巧. 1. Android的多媒体如何存储的? Android的 ...

  2. Android系统目录结构详解

    Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ...

  3. Android SDK Manager详解

    Android基础知识——Android SDK Manager详解   做Android开发时,免不了使用Android SDK Manager,安装需要的sdk版本.buildTools版本等等. ...

  4. JMessage Android 端开发详解

    目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 IM 应用会需要有哪些功能? 用户注册 / 登 ...

  5. android:ToolBar详解

    android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...

  6. atitit.mp4 视频文件多媒体格式结构详解

    atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个“box”组成的,2 4. 典型简化mp43 5. Fragments5 6. r ...

  7. Android之canvas详解

    首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...

  8. 【转】Android Canvas绘图详解(图文)

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...

  9. (转)phonegap 数据库详解

    原文:http://firepix.iteye.com/blog/1618343 phonegap 数据库详解          博客分类: web App phonegap  今天就把之前使用pho ...

随机推荐

  1. OSI参考模型及各层功能,TCP与UDP的区别

    OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...

  2. IO流 FileOutputSteam在fos.txt写出hello

    package cn.idcast2; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...

  3. RDS MySQL 空间问题的原因和解决

    来源:https://help.aliyun.com/knowledge_detail/41739.html RDS MySQL 空间问题的原因和解决 更新时间:2016-07-22 17:20:14 ...

  4. linux用命令删除重复行

    文本处理时,经常要删除重复行,下面是三种方法 第一,用sort+uniq,注意,单纯uniq是不行的. sort -n test.txt | uniq 第二,用sort+awk命令,注意,单纯awk同 ...

  5. visio二次开发——图纸解析

    (转发请注明来源:http://www.cnblogs.com/EminemJK/) visio二次开发的案例或者教程,国内真的非常少,这个项目也是花了不少时间来研究visio的相关知识,困难之所以难 ...

  6. 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector)

    一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得前两篇文章吗.主要讲述了以“jQuery的方式如何开发插件”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方式各有利 ...

  7. tyvj1203 机器分配

    描述 总公司拥有高效生产设备M台,准备分给下属的N个公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M<=100,N& ...

  8. hzwer模拟赛 Hzwer的陨石

    题目描述 Description 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很 ...

  9. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  10. word20161207

    DHCPRELEASE, DHCP release message / DHCP 释放消息 DHCPREQUEST, DHCP request message / DHCP 请求消息 dial 拨号位 ...