`

android 多媒体数据库详解

 
阅读更多

 

主要分为几节:

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_URIMediaStore.Images.Media.EXTERNAL_CONTENT_URI两个基础地址,其值分别是content://media/internal/images/mediacontent://media/external/images/media对应内部库和外部库地址。每一张图片的地址基本上是上面的基础URL地址下加上图片的内部ID。打个比方一张存储卡上的图片ID2,其对应的Uri地址就是content://media/external/images/media/2.知道了这个地址,基本上就可以操作这张图片的所有信息了。

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

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

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

可以采用android.provider.MediaStore.Images.Media.getBitmap(ContentResolver cr, Uri url)方法,其中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.ThumbnailsgetThumbnail方法。另外其实也可以采用bitmapcompress的方法对图片进行一些压缩处理。

 

本文转载地址:http://fzlihui.iteye.com/blog/1097952

分享到:
评论

相关推荐

    Android应用开发详解pdf

    6. **数据存储**:Android提供了多种数据存储方式,如Shared Preferences、SQLite数据库、文件系统和ContentProvider。书中会详细讲解每种方式的适用场景及使用方法。 7. **网络通信**:网络编程是Android应用开发...

    android应用开发详解 郭宏志

    同时,他还会讲解Android的多媒体支持,如音频、视频的播放与录制,以及如何利用Camera API进行拍照和录像。 对于性能优化,书中会涵盖内存管理、线程调度、GPU渲染路径、电量优化等方面。这些知识可以帮助开发者...

    《Android应用开发详解》PDF

    同时,Android还提供了丰富的API用于网络通信、数据库操作、多媒体处理等,这些内容也会在书中有所阐述。 除此之外,Android应用的性能优化也是重要一环。书中会讲解如何进行内存管理和性能分析,避免内存泄漏,...

    Android应用开发详解

    7. **数据存储**: Android提供了多种数据存储方式,包括SQLite数据库、SharedPreferences、文件系统以及ContentProvider,开发者需要根据需求选择合适的方法。 8. **AndroidManifest.xml**: 这个文件是每个Android...

    android应用开发详解-PDF+示例源码(完整版).

    《Android应用开发详解》这本书是Android开发者的重要参考资料,它涵盖了Android应用开发的各个方面,包括环境搭建、UI设计、数据存储、网络通信、多媒体处理、性能优化等多个关键领域。结合PDF文档和示例源码,我们...

    android应用开发详解 源码(全2-18)

    接下来,第3章至第14章可能涉及了更深入的主题,比如线程管理(Handler、AsyncTask)、数据存储(SharedPreferences、SQLite数据库)、网络编程(HTTP请求、JSON解析)、多媒体处理(音频、视频)、传感器应用、位置...

    Android项目开发详解.( 翟大昆,陈春茶 )

    ### Android项目开发详解知识点概述 #### 一、Android项目开发基础 - **环境搭建**:在开始Android项目开发之前,需要搭建合适的开发环境。这包括安装Java Development Kit (JDK)、Android Studio(官方推荐的集成...

    Android技术开发详解

    除此之外,本书也会涉及Android多媒体处理,如图像加载与处理、音频和视频播放,以及Camera API的使用。在移动设备特有的功能如GPS定位、蓝牙通信、传感器数据获取等方面也会有详细的讲解。 对于性能优化,书中可能...

    Android应用开发详解 pdf

    除此之外,书中还会深入探讨Android的数据存储,包括SharedPreferences、SQLite数据库、文件系统以及网络数据的处理。这些技术对于应用保存和管理用户数据至关重要。 Android的多媒体支持也是开发者需要了解的部分...

    Android应用开发详解d88 android入门

    以上只是"Android应用开发详解d88 android入门"的部分知识点,实际学习中,你将深入到每个细节,包括但不限于动画、通知、文件I/O、多媒体支持、蓝牙连接、地图集成等。通过这个入门教程,你可以逐步掌握Android开发...

    android 项目开发详解代码(翟大昆,陈春茶)编著

    "Android 项目开发详解代码"由翟大昆和陈春茶编著,是一本深入探讨Android应用开发实践的书籍,其配套源码提供了丰富的实例,帮助读者更好地学习和掌握Android编程技术。下面,我们将详细解析这些源码中涉及的知识点...

    Android应用开发详解 源码(12-17章)

    14章:Android多媒体和图形 此章涵盖了Android系统对音频、视频和图像的支持,包括使用MediaPlayer类播放音频和视频,以及Bitmap类进行图像操作。此外,还介绍了OpenGL ES用于高性能图形编程的基础,以及Canvas、...

    《Android创意实例详解》源代码

    《Android创意实例详解》源代码是一份非常宝贵的资源,它为Android开发者提供了丰富的实践案例,帮助读者深入理解和应用Android开发技术。这份源代码涵盖了多个关键的Android开发知识点,包括但不限于用户界面设计、...

    Android应用开发详解(PDF带目录标签)

    随着移动设备功能的增强,多媒体处理也是Android开发的重要组成部分。书中会讲解如何集成和控制音频、视频,以及相机功能,包括图片选择、拍摄和编辑。 最后,为了确保应用的性能和稳定性,书中还涵盖了调试技巧、...

    《android系统应用开发详解》

    3. **数据存储**:Android支持多种数据存储方式,包括Shared Preferences、SQLite数据库、文件系统和Content Provider。书中将深入讨论这些存储方式的适用场景、优缺点及使用方法。 4. **网络通信**:Android应用...

Global site tag (gtag.js) - Google Analytics