Android 小項目之--Mini音樂播放器【簡單版】(附源碼)

上篇文章講服務的例子中,有個演示服務的後臺播放音樂,今天就來說一講多媒體之一的音樂播放。
  說到多媒體不得不向上追溯,空間多媒體是如何實現的,如何可讓咱們輕鬆的播放音樂、視頻?本章講述點大體以下:
  • 一、什麼是Open Core?
  • 二、Open Core 的具體功能。
  • 三、Mediaplayer 介紹  
    • 3.一、MediaPlayer 方法介紹
  • 四、完整音樂播放例子演示
  • 五、Android 模擬器使用SD卡
一、什麼是Open Core?
Open Core 是 Android 多媒體框架的核心,全部 Android 平臺的音頻、視頻的採用以及播放等操做,都是經過它來實現。
 
二、Open Core 的具體功能
  • 一、多媒體文件的播放、下載,包括:3GPP,MPEG-4,AAC 和 MP3 containers。
  • 二、流媒體文件的下載、實時播放,包括:3GPP,HTTP 和 RTSP/RTP。
  • 三、動態視頻和靜態圖像的編碼、解碼,例如:MPEG-4,H.263 和 AVC (H.264),JPEG。
  • 四、語音編碼格式:MP3,AAC,AAC+。
  • 五、視頻和圖像格式:3GPP,MPEG-4 和 JPEG。
  • 六、視頻會議:基於 H324-M 標準。
Open Core 是一個多媒體的框架,從宏觀上來看,它主要包含了兩大方面的內容:
  • 一、PVPPlayer:提供媒體播放器的功能,完成各類音頻(Audio)、視頻(Video)流的回放(Playback)功能。
  • 二、PVAuthor:提供媒體流記錄的功能,完成各類音頻、視頻流以及靜態圖像的捕獲功能。
三、Mediaplayer 介紹 
MediaPlayer 類能夠用來播放音頻、視頻和流媒體, MediaPlayer 包含了 Audio 和 Video 的播放功能,在 Android 的界面上, Music 和 Video 兩個應用程序都是調用 MediaPlayer 實現的。下面兩張圖是 MediaPlayer  在 Android 和 Open Core 的示例圖:
 
下面是圖例顯示 MediaPlayer 的生命週期
3.一、MediaPlayer 經常使用方法介紹
四、完整音樂播放例子演示
經過上面的講解大體知道了 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:播放器不可能只是但願播放一種音樂格式,而且還須要自動識別指定的路徑中哪些是能夠播放的音頻文件,哪些是不支持的格式,以上代碼能夠做爲參考。好了,下面貼出完整代碼
 
音樂播放器示例代碼
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.  */
    @Override
    
public   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() {
        
        @Override
        
public   void  onClick(View v) {
            
//  TODO Auto-generated method stub
             if (myMediaPlayer.isPlaying()){
                myMediaPlayer.reset();
            }
        }
    });
       
// 開始
       viewHolder.start.setOnClickListener( new  OnClickListener() {
        
        @Override
        
public   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() {
        
        @Override
        
public   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() {
            
            @Override
            
public   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));
       }
   }
   
   
// 當用戶返回時結束音樂並釋放音樂對象
       @Override
    
public   boolean  onKeyDown( int  keyCode, KeyEvent event) {
        
//  TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK){
               myMediaPlayer.stop();
               myMediaPlayer.release();
               
this .finish();
               
return   true ;
           }
        
return   super .onKeyDown(keyCode, event);
    }
   
       
// 當選擇列表項時播放音樂 
       @Override
    
protected   void  onListItemClick(ListView l, View v,  int  position,  long  id) {
        
//  TODO Auto-generated method stub
        currentListItem = position;
        playMusic(MUSIC_PATH
+ myMusicList.get(currentListItem));
    }
   
}
 
 
運行效果圖:

五、Android 模擬器使用SD卡
例子中直接指定SD卡里面的音樂文件進行操做,那麼咱們的Android模擬器如何使用SD卡呢?
建立好SD 卡那如何把文件導入SD 卡里面供模擬器使用呢?
  • 一、啓動程序,運行模擬器。
  • 二、在 Eclipse 上先把 DDMS 窗口,選擇 File Explorer 標籤。
  • 三、若是你當時建立AVD 時有順帶建立 SD 卡或者你經過DOS命令建立的SD 卡,那麼File Explorer 裏面就會顯示一個 "sdcard" 的文件夾,這時選中它,右上角的兩個箭頭就變成可用,右邊箭頭是導入,左邊箭頭是導出。
很少寫了,××× : /Files/TerryBlog/musicPlayer.rar
相關文章
相關標籤/搜索