Android媒體的一些使用總結

來源:互聯網
上載者:User

轉載地址為:http://blog.csdn.net/xingtian713/article/details/6458150

                        http://blog.csdn.net/xingtian713/article/details/6525411

主要分為幾節:

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 INTEGERPRIMARY KEY,_data TEXT,_size INTEGER,_display_name TEXT,mime_type TEXT,title

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

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

y_name TEXT);

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

Thumbnails表:這個表和images表是有直接關係的。主要儲存圖片的縮圖,Android為每一張儲存進系統的圖片檔案都會自動產生一張縮圖檔案。關於這一點還有一些特殊的技巧後面再講。我們可以看一下這個表的結構:

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

每一張image對應一條thumbnail記錄。

Video表:主要儲存視頻資訊了。和images表類似。表結構如下:

CREATE TABLE video (_id INTEGERPRIMARY KEY,_data TEXT NOT NULL,_display_name TEXT,_size INTEGER,mime_typeTEXT,date_added INTEGER,date_modified INTEGER,title TEXT,durationINTEGER,artist TEXT,album TEXT,resolution
TEXT,description TEXT,isprivateINTEGER,tags TEXT,category TEXT,language TEXT,mini_thumb_data TEXT,latitudeDOUBLE,longitude DOUBLE,datetaken INTEGER,mini_thumb_magic INTEGER, bucket_idTEXT, bucket_display_name TEXT, bookmark INTEGER);

Videothumbnails表:儲存視頻的縮圖資訊。這個和thumbnails表類似。

Audio表:音頻資訊比視頻資訊和圖片資訊要稍微複雜一些,主要是儲存了一些專輯(album)、歌手(artists)資訊,而專輯和歌手資訊是單獨的Table Store的,audio其實是一個視圖,真正的音頻資料資訊儲存在audio_meta表格中。我們可以看一下audio視圖的定義:

CREATE VIEW audio as SELECT * FROMaudio_meta LEFT OUTER JOIN artists ON audio_meta.artist_id=artists.artist_idLEFT 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的方法對圖片進行一些壓縮處理。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.