2025-05-23

 

1.多媒體存儲機制:
當Android的系統啟動的時候,系統會自動掃描sdcard內的(包括大容量存儲)跟系統內存的多媒體文件,並把獲得的信息保存在兩個系統數據庫中,以後在其他程序中如果想要訪問多媒體文件的信息,其實就是在這兩個數據庫中進行的,而不是直接去sdcard中或者手機內存裡取。兩張數據庫都是位於/data/data/com.android.providers.media/databases目錄下。如下圖所示:

名為external.db裡面存儲的是sdcard(包括大容量存儲的媒體信息),名為internal.db存儲的就是手機內存的媒體信息,比如說手機出廠時自帶的一些鈴聲。當然如果有多張sdcard更換使用時,這時external.db不一定是固定的,或許像下圖這樣,但每一個名字確實對應著那張sdcard。

可以使用SQLite Expert這個工具打開這個數據庫文件看一下:

這個就是存放系統內置鈴聲的表。

2.更新多媒體數據庫:
既然其他程序中如果想要訪問多媒體文件的信息,是在這兩個數據庫中進行的,而不是直接去sdcard中或者手機內存裡取。那麼當我們下載一首歌曲完成的時候可能就會需要更新播放列表,否則除瞭重啟機器,或者拔瞭sdcard再插上,目前沒有其他辦法。好吧,發送一個廣播就會把當前新下載的或者剛剛刪除的文件信息同步進數據庫瞭。

 

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 

 

Uri.parse("file://" + Environment.getExternalStorageDirectory())));  

 

 

3.程序可操作的存儲路徑:
Android系統中,程序可讀寫的路徑隻有兩個,一個是sdcard,還有一個就是/data/data/包名,如果向/data/data/包名路徑中寫一個文件,很有可能寫完瞭不能進行執行操作等,所以必要時候還要給予相應的權限。可能需要這樣做:

 

 

/**

  * 

  * 新創建的文件需要給予權限<BR>

  * 

  * @param file 目標文件

  */ 

 public void chmod(File file) 

 { 

     try 

     { 

         if (null == file) 

         { 

             return; 

         } 

 

         String command = "chmod 666 " + file.getAbsolutePath(); 

         Log.i(TAG, "command = " + command); 

         Runtime runtime = Runtime.getRuntime(); 

         runtime.exec(command); 

     } 

     catch (IOException e) 

     { 

         Log.i(TAG, "chmod fail!!!!"); 

     } 

 }   

摘自 火山哥的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *