安卓开发练习册
2015-10-25 晴
VideoView:用于播放一段视频媒体,它继承了SurfaceView,位于”android.widget.VideoView”,是一个视频控件。
MediaController
虽然VideoView为我们提供了方便的API用于播放、暂停、停止等操作,但是还是需要我们编码完成,但是如果使用了MediaController的话,那么这些操作都可以省去。
MediaController可以用于配合VideoView播放一段视频,它为VideoView提供一个悬浮的操作栏,在操作栏中可以对VideoView播放的视频进行控制,默认情况下,会悬浮显示三秒。它通过MediaController.setMediaPlayer()方法进行指定需要控制的VideoView,但是仅仅这样是不够的,MediaController的控制需要类似于双向控制,MediaController指定控制的VideoView,VideoView还需要指定那个MediaController来控制它,这需要使用VideoView.setMediaController()方法。
VideoView常用的方法:
- int getCurrentPosition():获取当前播放的位置。
- int getDuration():获取当前播放视频的总长度。
- isPlaying():当前VideoView是否在播放视频。
- void pause():暂停
- void seekTo(int msec):从第几毫秒开始播放。
- void resume():重新播放。
- void setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。
- void setVideoURI(Uri uri):以Uri的方式设置VideoView播放的视频源,可以是网络Uri或本地Uri。
- void start():开始播放。
- void stopPlayback():停止播放。
- setMediaController(MediaController controller):设置MediaController控制器。
- setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
- setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
- setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件。
MediaController的一些常用方法
- boolean isShowing():当前悬浮控制栏是否显示。
- void setMediaPlayer(MediaController.MediaPlayerControl
player):设置控制的组件。 - void setPrevNextListeners(View.OnClickListener
next,View.OnClickListener prev):设置上一个视频、下一个视频的切换事件。默认情况下,如果不通过setPrevNextListeners()设置切换视频的监听器,MediaController是不会显示这两个按钮的。
用VideoView写的视频播放器。但是总是播放不了。。。待解决
package com.example.video;
import java.io.File;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.drm.DrmErrorEvent;
import android.drm.DrmManagerClient;
import android.drm.DrmManagerClient.OnErrorListener;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.widget.VideoView;
public class MainActivity extends Activity implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
public static final String TAG = "VideoPlayer";
private VideoView mVideoView;
// String
// uriString="http://Media.zhbaby.org/BXLS/NewBaby/%E5%BC%80%E7%AF%87%E4%BB%8B%E7%BB%8D.mp4";
// private Uri mUri=Uri.parse(uriString);
// private int mPositionWhenPaused = -1;
private File file = new File(Environment.getExternalStorageDirectory(), "/storage/sdcard0/Movies/111.MP4");
private android.widget.MediaController mMediaController;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set the screen to landscape.
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
VideoView mVideoView = (VideoView) findViewById(R.id.vv_videoView);
mVideoView.setOnErrorListener(new android.media.MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
return true;
}
});
mVideoView = (VideoView) findViewById(R.id.vv_videoView);
mMediaController = new android.widget.MediaController(this);
mMediaController.setMediaPlayer(mVideoView);
mVideoView.setMediaController(mMediaController);
mVideoView.setVideoPath(file.getPath());
// mVideoView.setVideoURI(mUri);
mVideoView.start();
mVideoView.requestFocus();
}
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
return false;
}
}