当前位置:操作系统 > 安卓/Android >>

Android之MediaPlayer

Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。
    MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

   首先我们的播放器可能不只是希望播放一种格式的音乐,而且还需要自动识别指定的路径中哪些是可以播放的音频文件,哪些是不支持的格式,我们可以通过下面的代码来过滤文件类型:

Java代码 
class MusicFilter implements FilenamFilter{ 
    public boolean accept(File dir,String name){ 
        return(name.endWith(".mps3")); 
    } 

   

    现在我们已经得到了能够播放的音频文件,如何来实现一个播放列表的界面呢?本例我们使用ListActivity布局来实现。但是我们还需要几个按钮来表示开始、暂停等操作,我们使用ImageButton来实现,下面是我们的播放器的界面。

   现在我们需要指定音乐文件的位置,本例我们设置路径为“/sdcard/”,因此我们需要向SD卡中添加音频文件。步骤如下:启动模拟器,在Eclipse上选择DDMS窗口,选择File Explorer标签,向左、向右箭头分别是拷贝进、拷贝出指定位置,减号则是删除选中的文件。

   现在我们只需要设置这些ImageButton按钮的时间来处理相应的动作即可播放音乐,首先调用Reset(),这样做将重置MediaPlayer到它的正常状态,这是必须的。如果正在放一首歌曲,同事又想去改变这个数据源,这个Reset()功能也将停止任何正在播放的歌曲。因此,如果一首歌曲是播放状态,同事我们又要选择另一首歌曲,那么它将在启动下一首歌曲之前停止这首正在播放的歌曲。然后我们通过路径找到这首歌曲(setDataSource(String))同事调用prepare()和Start()。在这里指向MediaPlayer将启动播放你的歌曲。接下来的工作就是去装备一个OnCompletionLister(setOnCompletionListener(newOnCompletionListener())).在歌曲结束的时候,onCompletion(MediaPlayer)这个功能将被调用。比如我们可以在这里设置自动播放下一首歌曲。下面我们老看看具体的实现代码。

Java代码 
package com.yarin.android.Examples_07_01; 
 
import java.io.File; 
import java.io.FilenameFilter; 
import java.io.IOException; 
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.widget.ArrayAdapter; 
import android.widget.ImageButton; 
import android.widget.ListView; 
 
public class Activity01 extends ListActivity  

    /* 几个操作按钮 */ 
    private ImageButton mFrontImageButton   = null; 
    private ImageButton mStopImageButton    = null; 
    private ImageButton mStartImageButton   = null; 
    private ImageButton mPauseImageButton   = null; 
    private ImageButton mNextImageButton    = null; 
 
    /* MediaPlayer对象 */ 
    public MediaPlayer  mMediaPlayer        = null; 
     
    /* 播放列表 */ 
    private List<String> mMusicList = new ArrayList<String>(); 
     
    /* 当前播放歌曲的索引 */ 
    private int currentListItme = 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); 
        /* 更新显示播放列表 */ 
        musicList(); 
        /* 构建MediaPlayer对象 */ 
        mMediaPlayer        = new MediaPlayer(); 
 
        mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton);  
        mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton); 
        mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton);  
        mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton); 
        mNextImageButton = (ImageButton) findViewById(R.id.NextImageButton);  
         
        //停止按钮 
        mStopImageButton.setOnClickListener(new ImageButton.OnClickListener()  
        { 
            @Override 
            public void onClick(View v) 
            { 
                /* 是否正在播放 */ 
                if (mMediaPlayer.isPlaying()) 
                { 
                    //重置MediaPlayer到初始状态 
                    mMediaPlayer.reset(); 
                } 
            } 
        });  
         
        //开始按钮 
        mStartImageButton.setOnClickListener(new ImageButton.OnClickListener()  
        { 
            @Override 
            public void onClick(View v) 
            { 
                playMusic(MUSIC_PATH + mMusicList.get(currentListItme)); 
            } 
        });   
         
      

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,