使用MediaPlayer获取Http网络流时MediaPlayer的状态调用

来源:互联网 发布:酷方 知乎 编辑:程序博客网 时间:2024/05/19 12:26

先来说几个常用状态:

  1. MediaPlayer.OnCompletionListener   监听MediaPlayer播放完成时的状态,
     回调onCompletion(MediaPlayer mp)
  2. MediaPlayer.OnPreparedListener      监听MediaPlayer准备完成时的状态,
     回调onPrepared(MediaPlayer mp)
  3. MediaPlayer.OnErrorListener              监听MediaPlayer播放发生错误时的状态,
     回调onError(MediaPlayer mp, int what, int extra)
  4. MediaPlayer.OnBufferingUpdateListener   监听MediaPlayer缓冲完成时的状态,回调onBufferingUpdate(MediaPlayer mp, int percent)

贴上一段码表示状态

package com.example.day604;import android.media.MediaPlayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.io.IOException;/** * 通过http获得mp3文件播放, *该音频文件存在于服务器的位置 http://www.mobvcasting.com/android/audio/goodmorinigandroid.mp3 */public class MainActivity extends AppCompatActivity implements MediaPlayer.OnCompletionListener,        View.OnClickListener, MediaPlayer.OnPreparedListener,        MediaPlayer.OnErrorListener,MediaPlayer.OnBufferingUpdateListener{    private MediaPlayer mediaPlayer;    private TextView bufferText,statusText;    private Button start,stop;    private String url="http://www.mobvcasting.com/android/audio/goodmorinigandroid.mp3";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        start=(Button)findViewById(R.id.start);        stop=(Button)findViewById(R.id.stop);        bufferText=(TextView)findViewById(R.id.bufferText);        statusText=(TextView)findViewById(R.id.statusText);        statusText.setText("onCreate");        //这种无参构造的方式和以前的有参调用不同需要几个步骤        mediaPlayer=new MediaPlayer();        mediaPlayer.setOnCompletionListener(this);        mediaPlayer.setOnErrorListener(this);        mediaPlayer.setOnPreparedListener(this);        mediaPlayer.setOnBufferingUpdateListener(this);        statusText.setText("MediaPalyer created");        try {            mediaPlayer.setDataSource(url);            statusText.setText("setDataSource done");            statusText.setText("calling prepareAsync");//            mediaPlayer.prepare();//运行prepare()播放器会填充一个缓冲区,即使网速慢也能平稳的播放  但这里的prepare()会造成阻塞            mediaPlayer.prepareAsync();        } catch (IOException e) {            e.printStackTrace();        }        start.setOnClickListener(this);        stop.setOnClickListener(this);        start.setEnabled(false);        stop.setEnabled(false);    }    @Override    public void onClick(View v) {        if (v==start) {            mediaPlayer.start();            statusText.setText("start called");            start.setEnabled(false);            stop.setEnabled(true);        } else if (v==stop) {            mediaPlayer.pause();            statusText.setText("pause called");            start.setEnabled(true);        }    }    /**     * @param mp     * Mediaplayer播放完成时回调     */    @Override    public void onCompletion(MediaPlayer mp) {        statusText.setText("onComplete  called");        start.setEnabled(false);        stop.setEnabled(false);    }    /**     * @param mp     * 当完成prepareAsync()状态时回调,表明音频准备播放     */    @Override    public void onPrepared(MediaPlayer mp) {        statusText.setText("prepared called");        start.setEnabled(true);    }    /**     * @param mp     * @param what     * @param extra     * @return     *  当MediaPalyer发生错误后调用     */    @Override    public boolean onError(MediaPlayer mp, int what, int extra) {        statusText.setText("onError called");        switch (what) {            case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:                statusText.setText("MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK"+extra);                Log.v("Error:","MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:"+extra);                break;            case MediaPlayer.MEDIA_ERROR_SERVER_DIED:                statusText.setText("MEDIA_ERROR_SERVER_DIED:"+extra);                Log.v("Error","MEDIA_ERROR_SERVER_DIED:"+extra);                break;            case MediaPlayer.MEDIA_ERROR_UNKNOWN:                statusText.setText("MEDIA_ERROR_UNKNOWN:"+extra);                Log.v("Error","MEDIA_ERROR_UNKNOWN:"+extra);                break;        }        return false;    }    /**     * @param mp     * @param percent     * MediaPlayer正在缓冲时调用     */    @Override    public void onBufferingUpdate(MediaPlayer mp, int percent) {            bufferText.setText(""+percent+"%");    }}

0 0