Android媒體檔案(圖片 視頻 音頻 等檔案)需要掃描到媒體庫中才能通過相關的程式來查看. 比如
編寫一個程式從互連網上下載一個圖片儲存到SDCard中,退出程式開啟系統圖片程式並看不到剛剛下載的圖片.
這就是因為圖片沒有在系統媒體庫註冊的原因. 在系統啟動的時候(或者SDCard從新載入的時候)系統會掃描媒體檔案,並註冊新發現的檔案.
下面的樣本就是如何通過代碼來註冊新的媒體檔案.
import android.content.Context;<br /> import android.media.MediaScannerConnection;<br /> import android.net.Uri; </p><p> public class MediaScanner { </p><p> private MediaScannerConnection mediaScanConn = null; </p><p> private MusicSannerClient client = null; </p><p> private String filePath = null; </p><p> private String fileType = null; </p><p> private String[] filePaths = null;<br /> /**<br /> * 然後調用MediaScanner.scanFile("/sdcard/2.mp3");<br /> * */<br /> public MediaScanner(Context context) {<br /> //建立MusicSannerClient<br /> if (client == null) { </p><p> client = new MusicSannerClient();<br /> } </p><p> if (mediaScanConn == null) { </p><p> mediaScanConn = new MediaScannerConnection(context, client);<br /> }<br /> } </p><p> class MusicSannerClient implements<br /> MediaScannerConnection.MediaScannerConnectionClient { </p><p> public void onMediaScannerConnected() { </p><p> if(filePath != null){ </p><p> mediaScanConn.scanFile(filePath, fileType);<br /> } </p><p> if(filePaths != null){ </p><p> for(String file: filePaths){ </p><p> mediaScanConn.scanFile(file, fileType);<br /> }<br /> } </p><p> filePath = null; </p><p> fileType = null; </p><p> filePaths = null;<br /> } </p><p> public void onScanCompleted(String path, Uri uri) {<br /> // TODO Auto-generated method stub<br /> mediaScanConn.disconnect();<br /> } </p><p> } </p><p> /**<br /> * 掃描檔案標籤資訊<br /> * @param filePath 檔案路徑 eg:/sdcard/MediaPlayer/dahai.mp3<br /> * @param fileType 檔案類型 eg: audio/mp3 media /* application/ogg<br /> * */<br /> public void scanFile(String filepath,String fileType) { </p><p> this.filePath = filepath; </p><p> this.fileType = fileType;<br /> //串連之後調用MusicSannerClient的onMediaScannerConnected()方法<br /> mediaScanConn.connect();<br /> }<br /> /**<br /> * @param filePaths 檔案路徑<br /> * @param fileType 檔案類型<br /> * */<br /> public void scanFile(String[] filePaths,String fileType){ </p><p> this.filePaths = filePaths; </p><p> this.fileType = fileType; </p><p> mediaScanConn.connect(); </p><p> } </p><p> public String getFilePath() { </p><p> return filePath;<br /> } </p><p> public void setFilePath(String filePath) { </p><p> this.filePath = filePath;<br /> } </p><p> public String getFileType() { </p><p> return fileType;<br /> } </p><p> public void setFileType(String fileType) { </p><p> this.fileType = fileType;<br /> } </p><p> }
原帖地址:http://bashenmail.javaeye.com/blog/603680