MediaController with MediaPlayer

匿名 (未验证) 提交于 2019-12-03 01:22:02

问题:

I want media controls such as play/pause for streaming audio that I am playing in my app. I am using MediaPlayer to stream and play the audio.

Can someone provide a code snippet on how to use MediaController with MediaPlayer?

Thanks Chris

回答1:

It's quite simple to add media controller in a media player. Make your activity implement MediaPlayerControl and add unimplemented methods. Code is as below:

I am using code from Api demos from here http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html

public class ActivityVedioPlay extends Activity implements         OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,         OnVideoSizeChangedListener, SurfaceHolder.Callback, MediaPlayerControl { .....      private MediaPlayer mMediaPlayer;     private MediaController mcontroller;     private Handler handler = new Handler(); ..... @Override     public boolean onTouchEvent(MotionEvent event) {         /*          * the MediaController will hide after 3 seconds - tap the screen to          * make it appear again          */         mcontroller.show();         return false;     } ...... private void playVideo() {         doCleanUp();         try {             path = getIntent().getStringExtra("url");             if (path == "") {                 Toast.makeText(ActivityVedioPlay.this, "URL Not found",                         Toast.LENGTH_LONG).show();             }             mMediaPlayer = new MediaPlayer();             mMediaPlayer.setDataSource(path);             mMediaPlayer.setDisplay(holder);             mMediaPlayer.prepare();             mMediaPlayer.setOnBufferingUpdateListener(this);             mMediaPlayer.setOnCompletionListener(this);             mMediaPlayer.setOnPreparedListener(this);             mMediaPlayer.setScreenOnWhilePlaying(true);             mMediaPlayer.setOnVideoSizeChangedListener(this);             mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);             mcontroller = new MediaController(this);         } catch (Exception e) {             e.printStackTrace();         }     } ......  public void onPrepared(MediaPlayer mediaplayer) {         Log.d(TAG, "onPrepared called");         mIsVideoReadyToBePlayed = true;         if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {             startVideoPlayback();         }         mcontroller.setMediaPlayer(this);         mcontroller.setAnchorView(findViewById(R.id.mediaplayer_surfaceview_container));         handler.post(new Runnable() {              public void run() {                 mcontroller.setEnabled(true);                 mcontroller.show();             }         });     }  //mediacontroller implemented methods      public void start() {         mMediaPlayer.start();     }      public void pause() {         mMediaPlayer.pause();     }      public int getDuration() {         return mMediaPlayer.getDuration();     }      public int getCurrentPosition() {         return mMediaPlayer.getCurrentPosition();     }      public void seekTo(int i) {         mMediaPlayer.seekTo(i);     }      public boolean isPlaying() {         return mMediaPlayer.isPlaying();      }      public int getBufferPercentage() {         return 0;     }      public boolean canPause() {         return true;     }      public boolean canSeekBackward() {         return true;     }      public boolean canSeekForward() {         return true;     } 


回答2:

As easy as this code extracted from here. They use VideoView instead of a MediaPlayer, which saves you a few lines of code:

Layout:

And code:

public class VideoPlayerController extends Activity {      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          setContentView(R.layout.video);          VideoView videoView = (VideoView) findViewById(R.id.VideoView);         MediaController mediaController = new MediaController(this);         mediaController.setAnchorView(videoView); // Set video link (mp4 format )         Uri video = Uri.parse("mp4 video link");         videoView.setMediaController(mediaController);         videoView.setVideoURI(video);         videoView.start();      } } 

That's all. Just replace mp4 video link with a streaming video url.



回答3:

Here is an example that does not use VideoView but MediaPlayer and MediaController to play audio:
How can I show a MediaController while playing audio in Android?



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!