日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Mini音乐播放器【简单版】(附源码)

發布時間:2025/5/22 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mini音乐播放器【简单版】(附源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
繼上篇音樂播放器,我們講到使用 SDCard 播放音樂的例子,上篇也將如何在 android 模擬器中創建 SDCard 的步驟列了出來。本篇將擴展上篇例子,去獲取SDCard 的所存內存,顯示出來告訴用戶。本篇講述的內容如下:
  • 1、講述 Environment 類。
  • 2、講述 StatFs 類。
  • 3、完整例子讀取 SDCard 內存

1、講述 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 的根目錄

2、講述 StatFs 類StatFs 一個模擬linux的df命令的一個類,獲得SD卡和手機內存的使用情況 StatFs 常用方法:

  • getAvailableBlocks() 解釋:返回 Int ,獲取當前可用的存儲空間
  • getBlockCount() 解釋:返回 Int ,獲取該區域可用的文件系統數
  • getBlockSize() 解釋:返回 Int ,大小,以字節為單位,一個文件系統
  • getFreeBlocks() 解釋:返回 Int ,該塊區域剩余的空間
  • restat(String path) 解釋:執行一個由該對象所引用的文件系統

3、完整例子讀取 SDCard 內存存儲卡在 Android 手機上是可以隨時插拔的,每次的動作都對引起操作系統進行 ACTION_BROADCAST,本例子將使用上面學到的方法,計算出 SDCard 的剩余容量和總容量。

?

???

下面是圖例顯示 MediaPlayer 的生命周期

?

3.1、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() 解釋:無返回值,停止播放

4、完整音樂播放例子演示通過上面的講解大致知道了 MediaPlayer 的播放原理,下面我們來完成一個小項目,即實現一個 Mini 版音樂播放器。這個播放器中我們需要有暫停、停止、上一首、下一首等基本按鈕,有了上面的講解要實現這個小項目就輕松多了,下面將貼出代碼

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>();//當前播放歌曲的索引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);}//監聽事件 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));}}//當用戶返回時結束音樂并釋放音樂對象 @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);}//當選擇列表項時播放音樂 @Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {// TODO Auto-generated method stub currentListItem=position;playMusic(MUSIC_PATH+myMusicList.get(currentListItem));}}

運行效果圖:

5、Android 模擬器使用SD卡例子中直接指定SD卡里面的音樂文件進行操作,那么我們的Android模擬器如何使用SD卡呢?

  • 1、不用操作 DOS 直接使用 Android SDK and AVD Manager 在創建 AVD 時創建一個SD 卡,這樣就可以實現,不妨親手試試。

創建好SD 卡那如何把文件導入SD 卡里面供模擬器使用呢?

  • 1、啟動程序,運行模擬器。
  • 2、在 Eclipse 上先把 DDMS 窗口,選擇 File Explorer 標簽。
  • 3、如果你當時創建AVD 時有順帶創建 SD 卡或者你通過DOS命令創建的SD 卡,那么File Explorer 里面就會顯示一個 "sdcard" 的文件夾,這時選中它,右上角的兩個箭頭就變成可用,右邊箭頭是導入,左邊箭頭是導出。

?

?

轉載于:https://www.cnblogs.com/vus520/archive/2012/03/18/2561971.html

總結

以上是生活随笔為你收集整理的Mini音乐播放器【简单版】(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。