Mini音乐播放器【简单版】(附源码)
- 1、講述 Environment 類。
- 2、講述 StatFs 類。
- 3、完整例子讀取 SDCard 內(nèi)存
1、講述 Environment 類Environment 是一個提供訪問環(huán)境變量的類。Environment 包含常量:
- MEDIA_BAD_REMOVAL 解釋:返回getExternalStorageState() ,表明SDCard 被卸載前己被移除
- MEDIA_CHECKING 解釋:返回getExternalStorageState() ,表明對象正在磁盤檢查。
- MEDIA_MOUNTED 解釋:返回getExternalStorageState() ,表明對象是否存在并具有讀/寫權(quán)限
- MEDIA_MOUNTED_READ_ONLY 解釋:返回getExternalStorageState() ,表明對象權(quán)限為只讀
- MEDIA_NOFS 解釋:返回getExternalStorageState() ,表明對象為空白或正在使用不受支持的文件系統(tǒng)。
- MEDIA_REMOVED 解釋:返回getExternalStorageState() ,如果不存在 SDCard 返回
- MEDIA_SHARED 解釋:返回getExternalStorageState() ,如果 SDCard 未安裝 ,并通過 USB 大容量存儲共享 返回
- MEDIA_UNMOUNTABLE 解釋:返回getExternalStorageState() ,返回 SDCard 不可被安裝 如果 SDCard 是存在但不可以被安裝
- MEDIA_UNMOUNTED 解釋:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard? 是存在但是沒有被安裝
Environment 常用方法:
- 方法:getDataDirectory() 解釋:返回 File ,獲取 Android 數(shù)據(jù)目錄。
- 方法:getDownloadCacheDirectory() 解釋:返回 File ,獲取 Android 下載/緩存內(nèi)容目錄。
- 方法:getExternalStorageDirectory() 解釋:返回 File ,獲取外部存儲目錄即 SDCard
- 方法:getExternalStoragePublicDirectory(String type) 解釋:返回 File ,取一個高端的公用的外部存儲器目錄來擺放某些類型的文件
- 方法:getExternalStorageState() 解釋:返回 File ,獲取外部存儲設(shè)備的當(dāng)前狀態(tài)
- 方法:getRootDirectory() 解釋:返回 File ,獲取 Android 的根目錄
2、講述 StatFs 類StatFs 一個模擬linux的df命令的一個類,獲得SD卡和手機(jī)內(nèi)存的使用情況 StatFs 常用方法:
- getAvailableBlocks() 解釋:返回 Int ,獲取當(dāng)前可用的存儲空間
- getBlockCount() 解釋:返回 Int ,獲取該區(qū)域可用的文件系統(tǒng)數(shù)
- getBlockSize() 解釋:返回 Int ,大小,以字節(jié)為單位,一個文件系統(tǒng)
- getFreeBlocks() 解釋:返回 Int ,該塊區(qū)域剩余的空間
- restat(String path) 解釋:執(zhí)行一個由該對象所引用的文件系統(tǒng)
3、完整例子讀取 SDCard 內(nèi)存存儲卡在 Android 手機(jī)上是可以隨時插拔的,每次的動作都對引起操作系統(tǒng)進(jìn)行 ACTION_BROADCAST,本例子將使用上面學(xué)到的方法,計算出 SDCard 的剩余容量和總?cè)萘俊?/span>
?
???
下面是圖例顯示 MediaPlayer 的生命周期
?
3.1、MediaPlayer 常用方法介紹
- 方法:create(Context context, Uri uri)? 解釋:靜態(tài)方法,通過Uri創(chuàng)建一個多媒體播放器。
- 方法:create(Context context, int resid) 解釋:靜態(tài)方法,通過資源ID創(chuàng)建一個多媒體播放器
- 方法:create(Context context, Uri uri, SurfaceHolder holder) 解釋:靜態(tài)方法,通過Uri和指定 SurfaceHolder 【抽象類】 創(chuàng)建一個多媒體播放器
- 方法: getCurrentPosition() 解釋:返回 Int, 得到當(dāng)前播放位置
- 方法: getDuration() 解釋:返回 Int,得到文件的時間
- 方法:getVideoHeight() 解釋:返回 Int ,得到視頻的高度
- 方法:getVideoWidth() 解釋:返回 Int,得到視頻的寬度
- 方法:isLooping() 解釋:返回 boolean ,是否循環(huán)播放
- 方法:isPlaying() 解釋:返回 boolean,是否正在播放
- 方法:pause() 解釋:無返回值 ,暫停
- 方法:prepare() 解釋:無返回值,準(zhǔn)備同步
- 方法:prepareAsync() 解釋:無返回值,準(zhǔn)備異步
- 方法:release() 解釋:無返回值,釋放 MediaPlayer? 對象
- 方法:reset() 解釋:無返回值,重置 MediaPlayer? 對象
- 方法:seekTo(int msec) 解釋:無返回值,指定播放的位置(以毫秒為單位的時間)
- 方法:setAudioStreamType(int streamtype) 解釋:無返回值,指定流媒體的類型
- 方法:setDataSource(String path) 解釋:無返回值,設(shè)置多媒體數(shù)據(jù)來源【根據(jù) 路徑】
- 方法:setDataSource(FileDescriptor fd, long offset, long length) 解釋:無返回值,設(shè)置多媒體數(shù)據(jù)來源【根據(jù) FileDescriptor】
- 方法:setDataSource(FileDescriptor fd) 解釋:無返回值,設(shè)置多媒體數(shù)據(jù)來源【根據(jù) FileDescriptor】
- 方法:setDataSource(Context context, Uri uri) 解釋:無返回值,設(shè)置多媒體數(shù)據(jù)來源【根據(jù) Uri】
- 方法:setDisplay(SurfaceHolder sh) 解釋:無返回值,設(shè)置用 SurfaceHolder 來顯示多媒體
- 方法:setLooping(boolean looping) 解釋:無返回值,設(shè)置是否循環(huán)播放
- 事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener) 解釋:監(jiān)聽事件,網(wǎng)絡(luò)流媒體的緩沖監(jiān)聽
- 事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener) 解釋:監(jiān)聽事件,網(wǎng)絡(luò)流媒體播放結(jié)束監(jiān)聽
- 事件:setOnErrorListener(MediaPlayer.OnErrorListener listener) 解釋:監(jiān)聽事件,設(shè)置錯誤信息監(jiān)聽
- 事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener) 解釋:監(jiān)聽事件,視頻尺寸監(jiān)聽
- 方法:setScreenOnWhilePlaying(boolean screenOn) 解釋:無返回值,設(shè)置是否使用 SurfaceHolder 顯示
- 方法:setVolume(float leftVolume, float rightVolume) 解釋:無返回值,設(shè)置音量
- 方法:start() 解釋:無返回值,開始播放
- 方法:stop() 解釋:無返回值,停止播放
4、完整音樂播放例子演示通過上面的講解大致知道了 MediaPlayer 的播放原理,下面我們來完成一個小項目,即實現(xiàn)一個 Mini 版音樂播放器。這個播放器中我們需要有暫停、停止、上一首、下一首等基本按鈕,有了上面的講解要實現(xiàn)這個小項目就輕松多了,下面將貼出代碼
import java.io.File; import java.io.FilenameFilter;[/font]public class MusicFilter implements FilenameFilter{ @Overridepublic boolean accept(File dir, String filename) {// TODO Auto-generated method stubreturn (filename.endsWith(".mp3"));}}Tip:播放器不可能只是希望播放一種音樂格式,并且還需要自動識別指定的路徑中哪些是可以播放的音頻文件,哪些是不支持的格式,以上代碼可以作為參考。好了,下面貼出完整代碼
package com.terry;import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast;public class musicActivity extends ListActivity {//播放對象private MediaPlayer myMediaPlayer;//播放列表private List<String> myMusicList=new ArrayList<String>();//當(dāng)前播放歌曲的索引private int currentListItem=0;//音樂的路徑private static final String MUSIC_PATH=new String("/sdcard/");/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);myMediaPlayer=new MediaPlayer();findView();musicList(); listener(); } //綁定音樂void musicList(){File home=new File(MUSIC_PATH);if(home.listFiles(new MusicFilter()).length>0){for(File file:home.listFiles(new MusicFilter())){myMusicList.add(file.getName()); }ArrayAdapter<String> musicList=new ArrayAdapter<String> (musicActivity.this,R.layout.musicitme, myMusicList);setListAdapter(musicList);}}//獲取按鈕void findView(){ viewHolder.start=(Button)findViewById(R.id.start); viewHolder.stop=(Button)findViewById(R.id.stop); viewHolder.next=(Button)findViewById(R.id.next); viewHolder.pause=(Button)findViewById(R.id.pause); viewHolder.last=(Button)findViewById(R.id.last);}//監(jiān)聽事件 void listener(){//停止 viewHolder.stop.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(myMediaPlayer.isPlaying()){ myMediaPlayer.reset(); }} }); //開始viewHolder.start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub playMusic(MUSIC_PATH+myMusicList.get(currentListItem));} }); //下一首 viewHolder.next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub nextMusic();} }); //暫停 viewHolder.pause.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(myMediaPlayer.isPlaying()){ myMediaPlayer.pause(); }else{ myMediaPlayer.start(); }} }); //上一首 viewHolder.last.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub lastMusic();} }); }//播放音樂 void playMusic(String path){try { myMediaPlayer.reset();myMediaPlayer.setDataSource(path);myMediaPlayer.prepare();myMediaPlayer.start();myMediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Overridepublic void onCompletion(MediaPlayer mp) {// TODO Auto-generated method stub nextMusic();}});} catch (Exception e) {// TODO: handle exception e.printStackTrace(); }}//下一首void nextMusic(){ if(++currentListItem>=myMusicList.size()){currentListItem=0;}else{playMusic(MUSIC_PATH+myMusicList.get(currentListItem)); }}//上一首void lastMusic(){if(currentListItem!=0){if(--currentListItem>=0){currentListItem=myMusicList.size();} else{playMusic(MUSIC_PATH+myMusicList.get(currentListItem));}} else{playMusic(MUSIC_PATH+myMusicList.get(currentListItem));}}//當(dāng)用戶返回時結(jié)束音樂并釋放音樂對象 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif(keyCode==KeyEvent.KEYCODE_BACK){myMediaPlayer.stop();myMediaPlayer.release();this.finish();return true;}return super.onKeyDown(keyCode, event);}//當(dāng)選擇列表項時播放音樂 @Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {// TODO Auto-generated method stub currentListItem=position;playMusic(MUSIC_PATH+myMusicList.get(currentListItem));}}運(yùn)行效果圖:
5、Android 模擬器使用SD卡例子中直接指定SD卡里面的音樂文件進(jìn)行操作,那么我們的Android模擬器如何使用SD卡呢?
- 1、不用操作 DOS 直接使用 Android SDK and AVD Manager 在創(chuàng)建 AVD 時創(chuàng)建一個SD 卡,這樣就可以實現(xiàn),不妨親手試試。
創(chuàng)建好SD 卡那如何把文件導(dǎo)入SD 卡里面供模擬器使用呢?
- 1、啟動程序,運(yùn)行模擬器。
- 2、在 Eclipse 上先把 DDMS 窗口,選擇 File Explorer 標(biāo)簽。
- 3、如果你當(dāng)時創(chuàng)建AVD 時有順帶創(chuàng)建 SD 卡或者你通過DOS命令創(chuàng)建的SD 卡,那么File Explorer 里面就會顯示一個 "sdcard" 的文件夾,這時選中它,右上角的兩個箭頭就變成可用,右邊箭頭是導(dǎo)入,左邊箭頭是導(dǎo)出。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/vus520/archive/2012/03/18/2561971.html
總結(jié)
以上是生活随笔為你收集整理的Mini音乐播放器【简单版】(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cocos2d-CCScene所有场景切
- 下一篇: Cocos2d-游戏适应不同分辨率;