繼上篇音樂播放器,咱們講到使用 SDCard 播放音樂的例子,上篇也將如何在 Android 模擬器中建立 SDCard 的步驟列了出來。本篇將擴展上篇例子,去獲取SDCard 的所存內存,顯示出來告訴用戶。本篇講述的內容以下:
- 一、講述 Environment 類。
- 二、講述 StatFs 類。
- 三、完整例子讀取 SDCard 內存
一、講述 Environment 類Environment 是一個提供訪問環境變量的類。Environment包含常量:
- MEDIA_BAD_REMOVAL
解釋:返回getExternalStorageState() ,代表SDCard 被卸載前己被移除
- MEDIA_CHECKING
解釋:返回getExternalStorageState() ,代表對象正在磁盤檢查。
- MEDIA_MOUNTED
解釋:返回getExternalStorageState() ,代表對象是否存在並具備讀/寫權限
- MEDIA_MOUNTED_READ_ONLY
解釋:返回getExternalStorageState() ,代表對象權限爲只讀
- MEDIA_NOFS
解釋:返回getExternalStorageState() ,代表對象爲空白或正在使用不受支持的文件系統。
- MEDIA_REMOVED
解釋:返回getExternalStorageState() ,若是不存在 SDCard 返回
- MEDIA_SHARED
解釋:返回getExternalStorageState() ,若是 SDCard 未安裝 ,並經過 USB 大容量存儲共享 返回
- MEDIA_UNMOUNTABLE
解釋:返回getExternalStorageState() ,返回 SDCard 不可被安裝 若是 SDCard 是存在但不能夠被安裝
- MEDIA_UNMOUNTED
解釋:返回getExternalStorageState() ,返回 SDCard 已卸掉若是 SDCard 是存在可是沒有被安裝
Environment 經常使用方法:
- 方法:getDataDirectory()
解釋:返回 File ,獲取 Android 數據目錄。
- 方法:getDownloadCacheDirectory()
解釋:返回 File ,獲取 Android 下載/緩存內容目錄。
- 方法:getExternalStorageDirectory()
解釋:返回 File ,獲取外部存儲目錄即 SDCard
- 方法:getExternalStoragePublicDirectory(String type)
解釋:返回 File ,取一個高端的公用的外部存儲器目錄來擺放某些類型的文件
- 方法:getExternalStorageState()
解釋:返回 File ,獲取外部存儲設備的當前狀態
- 方法:getRootDirectory()
解釋:返回 File ,獲取 Android 的根目錄
二、講述 StatFs 類StatFs 一個模擬linux的df命令的一個類,得到SD卡和手機內存的使用狀況
StatFs 經常使用方法:
- getAvailableBlocks()
解釋:返回 Int ,獲取當前可用的存儲空間
- getBlockCount()
解釋:返回 Int ,獲取該區域可用的文件系統數
- getBlockSize()
解釋:返回 Int ,大小,以字節爲單位,一個文件系統
- getFreeBlocks()
解釋:返回 Int ,該塊區域剩餘的空間
- restat(String path)
解釋:執行一個由該對象所引用的文件系統
三、完整例子讀取 SDCard 內存存儲卡在 Android 手機上是能夠隨時插拔的,每次的動做都對引發操做系統進行 ACTION_BROADCAST,本例子將使用上面學到的方法,計算出 SDCard 的剩餘容量和總容量。代碼以下:
下面是圖例顯示 MediaPlayer 的生命週期
3.一、MediaPlayer 經常使用方法介紹
- 方法:create(Context context, Uri uri)
解釋:靜態方法,經過Uri建立一個多媒體播放器。
- 方法:create(Context context, int resid)
解釋:靜態方法,經過資源ID建立一個多媒體播放器
- 方法:create(Context context, Uri uri, SurfaceHolder holder)
解釋:靜態方法,經過Uri和指定 SurfaceHolder 【抽象類】 建立一個多媒體播放器
- 方法: getCurrentPosition()
解釋:返回 Int, 獲得當前播放位置
- 方法: getDuration()
解釋:返回 Int,獲得文件的時間
- 方法:getVideoHeight()
解釋:返回 Int ,獲得視頻的高度
- 方法:getVideoWidth()
解釋:返回 Int,獲得視頻的寬度
- 方法:isLooping()
解釋:返回 boolean ,是否循環播放
- 方法:isPlaying()
解釋:返回 boolean,是否正在播放
- 方法:pause()
解釋:無返回值 ,暫停
- 方法:prepare()
解釋:無返回值,準備同步
- 方法:prepareAsync()
解釋:無返回值,準備異步
- 方法:release()
解釋:無返回值,釋放 MediaPlayer 對象
- 方法:reset()
解釋:無返回值,重置 MediaPlayer 對象
- 方法:seekTo(int msec)
解釋:無返回值,指定播放的位置(以毫秒爲單位的時間)
- 方法:setAudioStreamType(int streamtype)
解釋:無返回值,指定流媒體的類型
- 方法:setDataSource(String path)
解釋:無返回值,設置多媒體數據來源【根據 路徑】
- 方法:setDataSource(FileDescriptor fd, long offset, long length)
解釋:無返回值,設置多媒體數據來源【根據 FileDescriptor】
- 方法:setDataSource(FileDescriptor fd)
解釋:無返回值,設置多媒體數據來源【根據 FileDescriptor】
- 方法:setDataSource(Context context, Uri uri)
解釋:無返回值,設置多媒體數據來源【根據 Uri】
- 方法:setDisplay(SurfaceHolder sh)
解釋:無返回值,設置用 SurfaceHolder 來顯示多媒體
- 方法:setLooping(boolean looping)
解釋:無返回值,設置是否循環播放
- 事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
解釋:監聽事件,網絡流媒體的緩衝監聽
- 事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
解釋:監聽事件,網絡流媒體播放結束監聽
- 事件:setOnErrorListener(MediaPlayer.OnErrorListener listener)
解釋:監聽事件,設置錯誤信息監聽
- 事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
解釋:監聽事件,視頻尺寸監聽
- 方法:setScreenOnWhilePlaying(boolean screenOn)
解釋:無返回值,設置是否使用 SurfaceHolder 顯示
- 方法:setVolume(float leftVolume, float rightVolume)
解釋:無返回值,設置音量
- 方法:start()
解釋:無返回值,開始播放
- 方法:stop()
解釋:無返回值,中止播放
四、完整音樂播放例子演示經過上面的講解大體知道了 MediaPlayer 的播放原理,下面咱們來完成一個小項目,即實現一個 Mini 版音樂播放器。這個播放器中咱們須要有暫停、中止、上一首、下一首等基本按鈕,有了上面的講解要實現這個小項目就輕鬆多了,下面將貼出代碼
- import java.io.File;
- import java.io.FilenameFilter;
- public class MusicFilter implements FilenameFilter{
- @Override
- public boolean accept(File dir, String filename) {
- // TODO Auto-generated method stub
- return (filename.endsWith(".mp3"));
- }
-
- }
複製代碼
Tip:播放器不可能只是但願播放一種音樂格式,而且還須要自動識別指定的路徑中哪些是能夠播放的音頻文件,哪些是不支持的格式,以上代碼能夠做爲參考。好了,下面貼出完整代碼
運行效果圖:
五、Android 模擬器使用SD卡例子中直接指定SD卡里面的音樂文件進行操做,那麼咱們的Android模擬器如何使用SD卡呢?
- 一、不用操做 DOS 直接使用 Android SDK and AVD Manager 在建立 AVD 時建立一個SD 卡,這樣就能夠實現,不妨親手試試。
建立好SD 卡那如何把文件導入SD 卡里面供模擬器使用呢?
- 一、啓動程序,運行模擬器。
- 二、在 Eclipse 上先把 DDMS 窗口,選擇 File Explorer 標籤。
- 三、若是你當時建立AVD 時有順帶建立 SD 卡或者你經過DOS命令建立的SD 卡,那麼File Explorer 裏面就會顯示一個 "sdcard" 的文件夾,這時選中它,右上角的兩個箭頭就變成可用,右邊箭頭是導入,左邊箭頭是導出。
很少寫了,源碼下載 :
musicPlayer.rar