1. 程式人生 > >android 多媒體之 MediaStore 學習記錄

android 多媒體之 MediaStore 學習記錄

1、開啟照相機,並將圖片儲存到  photoUri 路徑

Uri photoUri=Uri.fromFile(picFile);
Intent cameraIntent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);

MediaStore.Images.Media.EXTERNAL_CONTENT_URI:content://media/external/images/media
    MediaStore.Images.Media._ID :
    /**
     * The unique ID for a row.
     * <P>Type: INTEGER (long)</P>
     */
    public static final String _ID = "_id";


------------------------------------------------------------------------------------------------

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,latitudeDOUBL

E, longitude DOUBLE, datetaken INTEGER, orientation INTEGER, mini_thumb_magic INTEGER, bucket_id TEXT, bucket_display_name TEXT);

2、媒體檔案的地址描述方式

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中呼叫的()方法中獲取。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方法。另外其實也可以採用bitmapcompress的方法對圖片進行一些壓縮處理。

------------------------------------------------------------------------------------------------

獲取多媒體資源

public static final Cursor query(ContentResolver cr, Uri uri, String[] projection,String selection, String [] selectionArgs, String orderBy)

解析:

  1. ContentResolver cr:ContentResolver是應用與資源之間的銜接人,它的示例通常可以通過在Activity中呼叫的()方法中獲取
  2. Uri uri:前面提到的多媒體檔案的第一種地址描述,eg: MediaStore.Images.Media.EXTERNAL_CONTENT_URI  圖片的外部庫地址
  3. String[] projection:這個引數限定了返回的內容(列Column)。eg: new String[]{ MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media._ID }  :限定了返回的結果中只包含圖片的 DISPLAY_NAME 和 _ID 資訊
  4. String selection:設定條件,相當於SQL語句中的where。null表示不進行篩選。eg: MediaStore.Images.Media.DISPLAY_NAME+ "='helloworld'" ,只返回名稱為 helloworld 的圖片資料。
  5. String [] selectionArgs:這個引數是要配合selection引數使用的,如果你在selection 引數裡面有?,那麼你在selectionArgs寫的資料就會替換掉?,eg:當 selection = MediaStore.Images.Media.DISPLAY_NAME+ “=?” ,selectionArgs= new String[]{"helloworld"}的效果與上個例子是一樣的
  6. String orderBy:按照什麼進行排序,相當於SQL語句中的Order by。預設排序是升序,+" ASC"寫不寫效果都一樣。如果想要結果按照ID的降序排列:orderBy=MediaStore.Images.Media._ID+" desc " 。
eg:

Cursor cursor = MediaStore.Images.Media.query( getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                                                                    new String[]{ MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media._ID }  ,null, MediaStore.Images.Media._ID+" desc ");

學習參考資料:

相關推薦

android 多媒體 MediaStore 學習記錄

1、開啟照相機,並將圖片儲存到  photoUri 路徑 Uri photoUri=Uri.fromFile(picFile); Intent cameraIntent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE); camer

前端小白每天學習記錄----php(2)數據庫操作軟件

blog 4行 pan 一個數 修改 列數 tor 清0 插入數據 數據庫 存儲數據的倉庫(軟件)(DBA:Database Administrator)數據庫管理員mysqlsqlserveroracle...... 數據庫軟件架構 C(client)->

前端小白每天學習記錄----php(6)面向對象

prop 封裝數據 ima 影片 最大的 const object 經理 符號 php面向對象類: 一類共性事物的抽象 比如: eg:車子 共性:類的共性 eg:輪子、能動 對象: 類造出來的 eg:自行

前端小白每天學習記錄----js簡單的組件封裝

學習 styles this src 元素 modal info clas mov 設計模式:是解決問題的模板 關於設計模式,可以閱讀湯姆大叔的博文http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 這裏

Android逆向smali學習

Smali是Android虛擬機器Dalvik反彙編的結果。 Dalvik指令集 指令格式為:[op]-[type](可選)/[位寬,預設4位] [目標暫存器],[源暫存器](可選) 賦值:move*  v1,v2 返回操作:return-[type]  (void ,不帶, ob

Android UIRecyclerView——細節記錄

1、簡介 該篇文章記錄的是關於我們日常開發中常用的RecyclerView的一些小的細節。開發中用的比較多的有BRVAH框架,用於快速構建Adapter,介紹了新增頭佈局索引值的修改,還有設定空佈局。以及滑動監聽事件。 不知道大家有沒有關注到列表的索引,像Java中的陣列

Android多媒體認識聲音、錄音與播放(PCM)

一、對聲音的簡單認識 1、模擬訊號[摘錄於此] 模擬訊號傳輸過程中就是利用感測器把各種自然界各種連續的訊號轉換為幾乎一模一樣的電訊號。 比如說話聲音,原本是聲帶的震動。經過麥克風的採集,將聲波訊號轉換為電訊號, 電訊號波形是和原來的聲波波形一樣的。只是換種物理量來表示和傳遞。(電訊號模擬振動訊號)。 複製

Android多媒體認識MP3與內建媒體播放(MediaPlayer)

零、前言 作為90後,mp3格式的音樂可謂靈魂之友。 小時候帶著耳機,躺在桌子上聽歌看月亮心情依稀。 當某個旋律想起,還會不會浮現某個風景,某個人……, 今天全程單曲播放——梁靜茹-勇氣(獻上頻譜) 主要任務:SD卡音樂、網路音訊流的播放及控制 MP3的

Android多媒體SoundPool+pcm流的音訊操作

零、前言 今天比較簡單,先理一下錄製和播放的四位大將 再說一下SoundPool的使用和pcm轉wav 講一下C++檔案如何在Android中使用,也就是傳說中的JNI 最後講一下變速播放和變調播放 一、AudioRecord和MediaRecorder,AudioTrack和MediaPl

Android多媒體Camera的相關操作

零、前言 今天主要有兩點 1).介面佈局,檢視仿一下我手機自帶的相機 2).Camera的簡單使用,雖然Camera已經過時了,但還是來看一下,由簡入深 下一篇會介紹替代者:Camera2 溫馨提示:本文多圖預警,請Wifi觀看~ 許可權申請自行解決 <uses-permissi

Android多媒體Camera2的相關操作

零、前言 Android 5.0+ (API 21) ---->[原始碼裡讓我們用camera2] * @deprecated We recommend using the new {@link android.hardware.camera2} API for n

Android多媒體GL-ES戰記第一集--勇者集結

前言 1.本系列借花獻佛,結合了很多前人的文章以及書籍,我儘可能去總結並用我的思想進行加工 2.OpenGL一直是我的心結,也是時候去解開了,本系列稱不上原創,但每行程式碼都有著我思考的痕跡 3.本系列所有的圖片都是[張風捷特烈]所畫,如果有什麼錯誤還請指出,定會最快改正 4.本系列文章允許轉載、擷取

Android多媒體GL-ES戰記第二集--謎團立方

旁白:上集說到,為了獲取黑龍寶藏,勇者集結,共闖黑龍洞穴 經過一路艱辛,終於過了第四副本,前面還有什麼困難等待著他們?一起收看 第五副本:龍之圖陣 1.第一關卡:畫一個矩形 NPC:隱藏任務,解謎:GLES20.GL_TRIANGLE_STRIP繪製方式 發現逆時針畫的點貌似連的方式

Android多媒體GL-ES戰記第三集--聖火

前情回顧 旁邊: 勇者們為求黑龍寶藏,集結起來共闖黑龍副本,經歷重重艱辛, 終於獲得立方開啟了黑龍之門,這也只是新徵程的起點,後面將有更大的挑戰等著他們 張風捷特烈打開了門之後,看到了什麼?讓我們繼續收看 副本九:黑暗之淵 在開啟門後,光芒全部消失,眼中一團黑暗,張風捷特烈踏出一步

Android多媒體視訊播放器高階開發

1.獲取播放的資料來源 播放視訊的資料來源一般有兩個,一個是請求網路,從伺服器後臺直接獲取播放的視訊資訊,另一種是播放手機中本地的視訊,這裡我們採用的播放源為播放手機本地的視訊 1.1 查詢獲取手機中的視訊的資訊 1.1.1 查詢方法一 定義要查詢到的視訊的資訊,包括視

Android多媒體---Camera實時視訊採集預覽時方向處理

手機攝像頭(Camera)的影象資料來源於攝像頭硬體的影象感測器,這個影象感測器被固定到手機上後會有一個預設的取景方向,這個取景方向恰好是當手機左側橫放時的方向,其座標原點於手機橫放時的左上角。手機的正常方向和影象感測器預設取景方向示意圖如下: C

和菜鳥一起學linuxwifi學習記錄

也差不多一個月沒有更新部落格了,元旦也過去了,8天的班也上完了,小病也好了,時間又回到了每個周的週末了,不知道幹嘛,突然發現好像失去了什麼,好像做了很多很多沒有意義的事,一直都是在原點打轉,不知道接下去會是什麼,不知道為了什麼。也許總會有一段日子覺得很迷茫,不知所措。這麼一

讀書筆記1--android多媒體手機拍照

android系統從4.4版本開始,選取相簿中的圖片不再返回圖片真實的Uri了,而是一個封裝過的Uri,因此如果是4.4版本以上的手機就需要對這個Uri進行解析才行。 android.media.action.IMAGE_CAPTURE//手機相機 com.android.

Android ClassLoader工作原理學習記錄(一)

最近一直在處理客戶端動態載入、外掛相關的功能,其中的核心便是ClassLoader 類載入器。 不看原理,先看現象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate

hdfsnamenode學習記錄

1、基本概念 namenode:用於管理datanode和hdfs檔案資訊 namenode有兩個重要檔案fsimage和editslog namenode容錯機制 1、備份那些組成檔案系統元資