主要分为几节:
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(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.Thumbnails的getThumbnail方法。另外其实也可以采用bitmap的compress的方法对图片进行一些压缩处理。
本文转载地址:http://fzlihui.iteye.com/blog/1097952
相关推荐
6. **数据存储**:Android提供了多种数据存储方式,如Shared Preferences、SQLite数据库、文件系统和ContentProvider。书中会详细讲解每种方式的适用场景及使用方法。 7. **网络通信**:网络编程是Android应用开发...
同时,他还会讲解Android的多媒体支持,如音频、视频的播放与录制,以及如何利用Camera API进行拍照和录像。 对于性能优化,书中会涵盖内存管理、线程调度、GPU渲染路径、电量优化等方面。这些知识可以帮助开发者...
同时,Android还提供了丰富的API用于网络通信、数据库操作、多媒体处理等,这些内容也会在书中有所阐述。 除此之外,Android应用的性能优化也是重要一环。书中会讲解如何进行内存管理和性能分析,避免内存泄漏,...
7. **数据存储**: Android提供了多种数据存储方式,包括SQLite数据库、SharedPreferences、文件系统以及ContentProvider,开发者需要根据需求选择合适的方法。 8. **AndroidManifest.xml**: 这个文件是每个Android...
《Android应用开发详解》这本书是Android开发者的重要参考资料,它涵盖了Android应用开发的各个方面,包括环境搭建、UI设计、数据存储、网络通信、多媒体处理、性能优化等多个关键领域。结合PDF文档和示例源码,我们...
接下来,第3章至第14章可能涉及了更深入的主题,比如线程管理(Handler、AsyncTask)、数据存储(SharedPreferences、SQLite数据库)、网络编程(HTTP请求、JSON解析)、多媒体处理(音频、视频)、传感器应用、位置...
### Android项目开发详解知识点概述 #### 一、Android项目开发基础 - **环境搭建**:在开始Android项目开发之前,需要搭建合适的开发环境。这包括安装Java Development Kit (JDK)、Android Studio(官方推荐的集成...
除此之外,本书也会涉及Android多媒体处理,如图像加载与处理、音频和视频播放,以及Camera API的使用。在移动设备特有的功能如GPS定位、蓝牙通信、传感器数据获取等方面也会有详细的讲解。 对于性能优化,书中可能...
除此之外,书中还会深入探讨Android的数据存储,包括SharedPreferences、SQLite数据库、文件系统以及网络数据的处理。这些技术对于应用保存和管理用户数据至关重要。 Android的多媒体支持也是开发者需要了解的部分...
以上只是"Android应用开发详解d88 android入门"的部分知识点,实际学习中,你将深入到每个细节,包括但不限于动画、通知、文件I/O、多媒体支持、蓝牙连接、地图集成等。通过这个入门教程,你可以逐步掌握Android开发...
"Android 项目开发详解代码"由翟大昆和陈春茶编著,是一本深入探讨Android应用开发实践的书籍,其配套源码提供了丰富的实例,帮助读者更好地学习和掌握Android编程技术。下面,我们将详细解析这些源码中涉及的知识点...
14章:Android多媒体和图形 此章涵盖了Android系统对音频、视频和图像的支持,包括使用MediaPlayer类播放音频和视频,以及Bitmap类进行图像操作。此外,还介绍了OpenGL ES用于高性能图形编程的基础,以及Canvas、...
《Android创意实例详解》源代码是一份非常宝贵的资源,它为Android开发者提供了丰富的实践案例,帮助读者深入理解和应用Android开发技术。这份源代码涵盖了多个关键的Android开发知识点,包括但不限于用户界面设计、...
随着移动设备功能的增强,多媒体处理也是Android开发的重要组成部分。书中会讲解如何集成和控制音频、视频,以及相机功能,包括图片选择、拍摄和编辑。 最后,为了确保应用的性能和稳定性,书中还涵盖了调试技巧、...
3. **数据存储**:Android支持多种数据存储方式,包括Shared Preferences、SQLite数据库、文件系统和Content Provider。书中将深入讨论这些存储方式的适用场景、优缺点及使用方法。 4. **网络通信**:Android应用...