Android进阶篇MediaPlayer

Android系统提供了一个专门进行Media处理的接口,该接口就是MediaPlayer。

要播放相关的音乐文件,首先我们要在res文件下创建raw文件,将相关的资源文件放在该目录下。

第一步:

初始化MediaPlayer

mPlayer = MediaPlayer.create(this, R.raw.bubian);

第二步:

            try {
                if(mPlayer != null){
                    mPlayer.stop();
                }
                mPlayer.prepare();
                mPlayer.start();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

第三步:

音乐暂停:

            try {
                if(mPlayer != null){
                    mPlayer.stop();
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

当你要启动一个SeekBar进行展示音乐播放进度的时候,进行如下处理:

        seekBar.setMax(mPlayer.getDuration());
        timer = new Timer();
        TimerTask task = new TimerTask() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                    seekBar.setProgress(mPlayer.getCurrentPosition());
            }
        };
        timer.schedule(task, 0, 10);  

示例代码如下:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mPlayer = MediaPlayer.create(this, R.raw.bubian);
        
        button = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        seekBar = (SeekBar) findViewById(R.id.seekbar1);
        
        button2.setOnClickListener(this);
        button.setOnClickListener(this);
        seekBar.setOnSeekBarChangeListener(this);
        
        seekBar.setMax(mPlayer.getDuration());
        timer = new Timer();
        TimerTask task = new TimerTask() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                    seekBar.setProgress(mPlayer.getCurrentPosition());
            }
        };
        timer.schedule(task, 0, 10);  
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode == KeyEvent.KEYCODE_BACK){
            mPlayer.stop();
        }
        return super.onKeyDown(keyCode, event);
    }
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.button1:
            try {
                if(mPlayer != null){
                    mPlayer.stop();
                }
                mPlayer.prepare();
                mPlayer.start();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            break;
        case R.id.button2:
            try {
                if(mPlayer != null){
                    mPlayer.stop();
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            break;
            
            
        default:
            break;
        }
    }
    @Override
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
        // TODO Auto-generated method stub
        
    }
    @Override
    public void onStartTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub
    }
    
    @Override
    public void onStopTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub
        mPlayer.seekTo(seekBar.getProgress());
    }

 MusicPlayer播放工具类:

public class MusicPlayer {
    private static final String TAG = MusicPlayer.class.getSimpleName();
    
    private Context mContext;
    private MediaPlayer mediaPlayer;
    
    public MusicPlayer(Context context,String path){
        mContext = context;
        
        mediaPlayer = new MediaPlayer();
        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(path);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    
    /**
     * 直接全部播放
     */
    public void play(){
        LogUtil.info(TAG, "------play-----");
        try {
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    
    /**
     * 停止播放
     */
    public void stop(){
        LogUtil.info(TAG, "------stop-----");
        if(mediaPlayer != null){
            mediaPlayer.stop();
        }
    }
}

 

 

原文地址:https://www.cnblogs.com/gongcb/p/2494518.html