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

    xiaoxiao2021-04-13  27

    先来说几个常用状态:

    MediaPlayer.OnCompletionListener   监听MediaPlayer播放完成时的状态,  回调onCompletion(MediaPlayer mp) MediaPlayer.OnPreparedListener      监听MediaPlayer准备完成时的状态,  回调onPrepared(MediaPlayer mp) MediaPlayer.OnErrorListener              监听MediaPlayer播放发生错误时的状态,  回调onError(MediaPlayer mp, int what, int extra) 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+"%"); } }

    转载请注明原文地址: https://ju.6miu.com/read-668674.html

    最新回复(0)