写点什么

Android VideoPlayer

用户头像
Android架构
关注
发布于: 22 小时前

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);


mediaPlayer.setScreenOnWhilePlaying(true);


mediaPlayer.prepareAsync();


attachMediaController();


} catch (IOException ex) {


Log.w(TAG, "Unable to open content: " + mUri, ex);


return;


} catch (IllegalArgumentException ex) {


Log.w(TAG, "Unable to open content: " + mUri, ex);


return;


}


}


public void setMediaController(MediaController controller) {


if (mediaController != null) {


mediaController.hide();


}


mediaController = controller;


attachMediaController();


}


private void attachMediaController() {


if (mediaPlayer != null && mediaController != null) {


mediaController.setMediaPlayer(this);


View anchorView = this.getParent() instanceof View ?


(View) this.getParent() : this;


mediaController.setAnchorView(anchorView);


mediaController.setEnabled(isPrepared);


}


}


MediaPlayer.OnVideoSizeChangedListener mSizeChangedListener =


new MediaPlayer.OnVideoSizeChangedListener() {


public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {


videoWidth = mp.getVideoWidth();


videoHeight = mp.getVideoHeight();


if (mMyChangeLinstener != null) {


mMyChangeLinstener.doMyThings();


}


if (videoWidth != 0 && videoHeight != 0) {


getHolder().setFixedSize(videoWidth, videoHeight);


}


}


};


MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {


public void onPrepared(MediaPlayer mp) {


// briefly show the mediacontroller


isPrepared = true;


if (myOnPreparedListener != null) {


myOnPreparedListener.onPrepared(mediaPlayer);


}


if (mediaController != null) {


mediaController.setEnabled(true);


}


videoWidth = mp.getVideoWidth();


videoHeight = mp.getVideoHeight();


if (videoWidth != 0 && videoHeight != 0) {


//Log.i("@@@@", "video size: " + mVideoWidth +"/"+ mVideoHeight);


getHolder().setFixedSize(videoWidth, videoHeight);


if (surfaceWidth == videoWidth && surfaceHeight == videoHeight) {


// We didn't actually change the size (it was already at the size


// we need), so we won't get a "surface changed" callback, so


// start the video here instead of in the callback.


if (seekWhenPrepared != 0) {


mediaPlayer.seekTo(seekWhenPrepared);


seekWhenPrepared = 0;


}


if (startWhenPrepared) {


mediaPlayer.start();


startWhenPrepared = false;


if (mediaController != null) {


mediaController.show();


}


} else if (!isPlaying() &&


(seekWhenPrepared != 0 || getCurrentPosition() > 0)) {


if (mediaController != null) {


// Show the media controls when we're paused into a video and make 'em stick.


mediaController.show(0);


}


}


}


} else {


// We don't know the video size yet, but should start anyway.


// The video size might be reported to us later.


if (seekWhenPrepared != 0) {


mediaPlayer.seekTo(seekWhenPrepared);


seekWhenPrepared = 0;


}


if (startWhenPrepared) {


mediaPlayer.start();


startWhenPrepared = false;


}


}


}


};


private OnCompletionListener mCompletionListener =


new OnCompletionListener() {


public void onCompletion(MediaPlayer mp) {


if (mediaController != null) {


mediaController.hide();


}


if (myOnCompletionListener != null) {


myOnCompletionListener.onCompletion(mediaPlayer);


}


}


};


private OnErrorListener mErrorListener =


new OnErrorListener() {


public boolean onError(MediaPlayer mp, int framework_err, int impl_err) {


Log.d(TAG, "Error: " + framework_err + "," + impl_err);


if (mediaController != null) {


mediaController.hide();


}


/* If an error handler has been supplied, use it and finish. */


if (myOnErrorListener != null) {


if (myOnErrorListener.onError(mediaPlayer, framework_err, impl_err)) {


return true;


}


}


/* Otherwise, pop up an error dialog so the user knows that


  • something bad has happened. Only try and pop up the dialog

  • if we're attached to a window. When we're going away and no

  • longer have a window, don't bother showing the user an error.


*/


if (getWindowToken() != null) {


Resources r = mContext.getResources();


int messageId;


/* if (framework_err == MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK) {


messageId = com.android.internal.R.string.VideoView_error_text_invalid_progressive_playback;


} else {


messageId = com.android.internal.R.string.VideoView_error_text_unknown;


}


new AlertDialog.Builder(mContext)


.setTitle(com.android.internal.R.string.VideoView_error_title)


.setMessage(messageId)


.setPositiveButton(com.android.internal.R.string.VideoView_error_button,


new DialogInterface.OnClickListener() {


public void onClick(DialogInterface dialog, int whichButton) {


If we get here, there is no onError listener, so


  • at least inform them that the video is over.


if (mOnCompletionListener != null) {


mOnCompletionListener.onCompletion(mMediaPlayer);


}


}


})


.setCancelable(false)


.show();*/


}


return true;


}


};


private MediaPlayer.OnBufferingUpdateListener mBufferingUpdateListener =


new MediaPlayer.OnBufferingUpdateListener() {


public void onBufferingUpdate(MediaPlayer mp, int percent) {


currentBufferPercentage = percent;


}


};


/**


  • Register a callback to be invoked when the media file

  • is loaded and ready to go.

  • @param l The callback that will be run


*/


public void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {


myOnPreparedListener = l;


}


/**


  • Register a callback to be invoked when the end of a media file

  • has been reached during playback.

  • @param l The callback that will be run


*/


public void setOnCompletionListener(OnCompletionListener l) {


myOnCompletionListener = l;


}


/**


  • Register a callback to be invoked when an error occurs

  • during playback or setup. If no listener is specified,

  • or if the listener returned false, VideoView will inform

  • the user of any errors.

  • @param l The callback that will be run


*/


public void setOnErrorListener(OnErrorListener l) {


myOnErrorListener = l;


}


SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() {


public void surfaceChanged(SurfaceHolder holder, int format,


int w, int h) {


surfaceWidth = w;


surfaceHeight = h;


if (mediaPlayer != null && isPrepared && videoWidth == w && videoHeight == h) {


if (seekWhenPrepared != 0) {


mediaPlayer.seekTo(seekWhenPrepared);


seekWhenPrepared = 0;


}


mediaPlayer.start();


if (mediaController != null) {


mediaController.show();


}


}


}


public void surfaceCreated(SurfaceHolder holder) {


mSurfaceHolder = holder;


openVideo();


}


public void surfaceDestroyed(SurfaceHolder holder) {


// after we return from this we can't use the surface any more


mSurfaceHolder = null;


if (mediaController != null) mediaController.hide();


if (mediaPlayer != null) {


mediaPlayer.reset();


mediaPlayer.release();


mediaPlayer = null;


}


}


};


@Override


public boolean onTouchEvent(MotionEvent ev) {


if (isPrepared && mediaPlayer != null && mediaController != null) {


toggleMediaControlsVisiblity();


}


return false;


}


@Override


public boolean onTrackballEvent(MotionEvent ev) {


if (isPrepared && mediaPlayer != null && mediaController != null) {


toggleMediaControlsVisiblity();


}


return false;


}


@Override


public boolean onKeyDown(int keyCode, KeyEvent event) {


if (isPrepared &&


keyCode != KeyEvent.KEYCODE_BACK &&


keyCode != KeyEvent.KEYCODE_VOLUME_UP &&


keyCode != KeyEvent.KEYCODE_VOLUME_DOWN &&


keyCode != KeyEvent.KEYCODE_MENU &&


keyCode != KeyEvent.KEYCODE_CALL &&


keyCode != KeyEvent.KEYCODE_ENDCALL &&


mediaPlayer != null &&


mediaController != null) {


if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK ||


keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) {


if (mediaPlayer.isPlaying()) {


pause();


mediaController.show();


} else {


start();


mediaController.hide();


}


return true;


} else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP


&& mediaPlayer.isPlaying()) {


pause();


mediaController.show();


} else {


toggleMediaControlsVisiblity();


}


}


return super.onKeyDown(keyCode, event);


}


private void toggleMediaControlsVisiblity() {


if (mediaController.isShowing()) {


mediaController.hide();


} else {


mediaController.show();


}


}


public void start() {


if (mediaPlayer != null && isPrepared) {


mediaPlayer.start();


startWhenPrepared = false;


} else {


startWhenPrepared = true;


}


}


public void pause() {


if (mediaPlayer != null && isPrepared) {


if (mediaPlayer.isPlaying()) {


mediaPlayer.pause();


}


}


startWhenPrepared = false;


}


public int getDuration() {


if (mediaPlayer != null && isPrepared) {


if (mDuration > 0) {


return mDuration;


}


mDuration = mediaPlayer.getDuration();


return mDuration;


}


mDuration = -1;


return mDuration;


}


public int getCurrentPosition() {


if (mediaPlayer != null && isPrepared) {


return mediaPlayer.getCurrentPosition();


}


return 0;


}


public void seekTo(int msec) {


if (mediaPlayer != null && isPrepared) {


mediaPlayer.seekTo(msec);


} else {


seekWhenPrepared = msec;


}


}


public boolean isPlaying() {


if (mediaPlayer != null && isPrepared) {


return mediaPlayer.isPlaying();


}


return false;


}


public int getBufferPercentage() {


if (mediaPlayer != null) {


return currentBufferPercentage;


}


return 0;


}


@Override


public boolean canPause() {


return false;


}


@Override


public boolean canSeekBackward() {


return false;


}


@Override


public boolean canSeekForward() {


return false;


}


@Override


public int getAudioSessionId() {


return 0;


}


}


VolumeView:


package com.tchip.autoplayer.view;


import android.content.Context;


import android.graphics.Bitmap;


import android.graphics.BitmapFactory;


import android.graphics.Canvas;


import android.graphics.Rect;


import android.media.AudioManager;


import android.util.AttributeSet;


import android.util.Log;


import android.view.MotionEvent;


import android.view.View;


import com.tchip.autoplayer.R;


public class VolumeView extends View {


public final static String TAG = "SoundView";


private Context context;


/**


  • 音量条高亮


*/


private Bitmap bitmapVolumeLineOn;


private Bitmap bitmapVolumeLineOff;


private int bitmapWidth, bitmapHeight;


private int index;


private OnVolumeChangedListener mOnVolumeChangedListener;


private final static int HEIGHT = 11;


public final static int MY_HEIGHT = 163;


public final static int MY_WIDTH = 44;


public interface OnVolumeChangedListener {


public void setYourVolume(int index);


}


public void setOnVolumeChangeListener(OnVolumeChangedListener l) {


mOnVolumeChangedListener = l;


}


public VolumeView(Context context, AttributeSet attrs, int defStyle) {


super(context, attrs, defStyle);


context = context;


init();


}


public VolumeView(Context context, AttributeSet attrs) {


super(context, attrs);


context = context;


init();


}


public VolumeView(Context context) {


super(context);


context = context;


init();


}


private void init() {


bitmapVolumeLineOn = BitmapFactory.decodeResource(context.getResources(),


R.drawable.volume_line_on);


bitmapVolumeLineOff = BitmapFactory.decodeResource(context.getResources(),


R.drawable.volume_line_off);


bitmapWidth = bitmapVolumeLineOn.getWidth();


bitmapHeight = bitmapVolumeLineOn.getHeight();


//setIndex(5);


AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);


setIndex(am.getStreamVolume(AudioManager.STREAM_MUSIC));


}


@Override


public boolean onTouchEvent(MotionEvent event) {


int y = (int) event.getY();


int n = y * 15 / MY_HEIGHT;


setIndex(15 - n);


Log.d(TAG, "setIndex: " + (15 - n));


return true;


}


@Override


protected void onDraw(Canvas canvas) {


int reverseIndex = 15 - index;


for (int i = 0; i != reverseIndex; ++i) {


canvas.drawBitmap(bitmapVolumeLineOff, new Rect(0, 0, bitmapWidth, bitmapHeight),


new Rect(0, i * HEIGHT, bitmapWidth, i * HEIGHT + bitmapHeight), null);


}


for (int i = reverseIndex; i != 15; ++i) {


canvas.drawBitmap(bitmapVolumeLineOn, new Rect(0, 0, bitmapWidth, bitmapHeight),


new Rect(0, i * HEIGHT, bitmapWidth, i * HEIGHT + bitmapHeight), null);


}


super.onDraw(canvas);


}


private void setIndex(int n) {


if (n > 15) {


n = 15;


} else if (n < 0) {


n = 0;


}


if (index != n) {


index = n;


if (mOnVolumeChangedListener != null) {


mOnVolumeChangedListener.setYourVolume(n);


}


}


invalidate();


}


}


VideoPlayerActivity:


package com.tchip.autoplayer;


import java.io.File;


import java.io.FileFilter;


import java.util.LinkedList;


import android.app.Activity;


import android.app.AlertDialog;


import android.content.Context;


import android.content.DialogInterface;


import android.content.Intent;


import android.content.pm.ActivityInfo;


import android.content.res.Configuration;


import android.database.Cursor;


import android.media.AudioManager;


import android.media.MediaPlayer;


import android.media.MediaPlayer.OnCompletionListener;


import android.media.MediaPlayer.OnErrorListener;


import android.media.MediaPlayer.OnPreparedListener;


import android.net.Uri;


import android.os.Bundle;


import android.os.Handler;


import android.os.Looper;


import android.os.Message;


import android.os.MessageQueue.IdleHandler;


import android.provider.MediaStore;


import android.util.Log;


import android.view.Display;


import android.view.Gravity;


import android.view.MotionEvent;


import android.view.View;


import android.view.WindowManager;


import android.view.View.OnClickListener;


import android.view.View.OnLongClickListener;


import android.view.ViewGroup.LayoutParams;


import android.widget.ImageButton;


import android.widget.PopupWindow;


import android.widget.SeekBar;


import android.widget.TextView;


import android.widget.SeekBar.OnSeekBarChangeListener;


import android.view.GestureDetector;


import android.view.GestureDetector.SimpleOnGestureListener;


import com.tchip.autoplayer.model.VideoInfo;


import com.tchip.autoplayer.view.VolumeView;


import com.tchip.autoplayer.view.VideoView;


public class VideoPlayerActivity extends Activity {


private final static String TAG = "VideoPlayerActivity";


private boolean isOnline = false;


private boolean isChangedVideo = false;


public static LinkedList<VideoInfo> playList = new LinkedList<VideoInfo>();


private Uri videoListUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;


private static int position;


private static boolean backFromAD = false;


private int playedTime;


/**


  • 视频视图


*/


private VideoView videoView;


private SeekBar seekBar;


/**


  • 视频总时间


*/


private TextView textTimeTotal;


/**


  • 已播放时间


*/


private TextView textTimePlay;


private GestureDetector mGestureDetector = null;


private AudioManager mAudioManager = null;


private int maxVolume = 0;


private int currentVolume = 0;


/**


  • 视频列表按钮


*/


private ImageButton btnList;


/**


  • 上一部按钮


*/


private ImageButton btnPrevious;


/**


  • 播放/暂停


*/


private ImageButton btnState;


/**


  • 下一部按钮


*/


private ImageButton btnNext;


/**


  • 调节音量按钮


*/


private ImageButton btnVolume;


private View controlView = null;


private PopupWindow popupControl;


/**


  • 音量视图


*/


private VolumeView volumeView;


private PopupWindow popupVolume;


private View extralView;


private PopupWindow extralWindow = null;


private static int screenWidth = 0;


private static int screenHeight = 0;


private static int controlHeight = 0;


private final static int TIME = 6868;


private boolean isControllerShow = true;


private boolean isPaused = false;


private boolean isFullScreen = false;


private boolean isSilent = false;


private boolean isSoundShow = false;


@Override


public void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);


// initialLayout();


Looper.myQueue().addIdleHandler(new IdleHandler() {


@Override


public boolean queueIdle() {


if (popupControl != null && videoView.isShown()) {


popupControl.showAtLocation(videoView, Gravity.BOTTOM, 0, 0);


// controler.update(screenWidth, controlHeight);


popupControl.update(0, 0, screenWidth, controlHeight);


}


if (extralWindow != null && videoView.isShown()) {


extralWindow.showAtLocation(videoView, Gravity.TOP, 0, 0);


extralWindow.update(0, 25, screenWidth, 60);


}


// myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);


return false;


}


});


controlView = getLayoutInflater().inflate(R.layout.controler, null);


popupControl = new PopupWindow(controlView);


textTimeTotal = (TextView) controlView.findViewById(R.id.textTimeTotal);


textTimePlay = (TextView) controlView.findViewById(R.id.textTimePlay);


volumeView = new VolumeView(this);


volumeView.setOnVolumeChangeListener(new VolumeView.OnVolumeChangedListener() {


@Override


public void setYourVolume(int index) {


cancelDelayHide();


updateVolume(index);


hideControllerDelay();


}


});


popupVolume = new PopupWindow(volumeView);


extralView = getLayoutInflater().inflate(R.layout.extral, null);


extralWindow = new PopupWindow(extralView);


ImageButton btnBack = (ImageButton) extralView


.findViewById(R.id.btnBack);


position = -1;


btnBack.setOnClickListener(myOnClickListener);


btnList = (ImageButton) controlView.findViewById(R.id.btnList);


btnPrevious = (ImageButton) controlView.findViewById(R.id.btnPrevious);


btnState = (ImageButton) controlView.findViewById(R.id.btnState);


btnNext = (ImageButton) controlView.findViewById(R.id.btnNext);


btnVolume = (ImageButton) controlView.findViewById(R.id.btnVolume);


videoView = (VideoView) findViewById(R.id.videoView);


videoView.setOnErrorListener(new OnErrorListener() {


@Override


public boolean onError(MediaPlayer mp, int what, int extra)


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


{


videoView.stopPlayback();


isOnline = false;


new AlertDialog.Builder(VideoPlayerActivity.this)


.setTitle("Error")


.setMessage("?")


.setPositiveButton("Confirm",


new AlertDialog.OnClickListener() {


@Override


public void onClick(DialogInterface dialog,


int which) {


videoView.stopPlayback();


}


}).setCancelable(false).show();


return false;


}


});


Uri uri = getIntent().getData();


if (uri != null) {


videoView.stopPlayback();


videoView.setVideoURI(uri);


isOnline = true;


btnState.setImageResource(R.drawable.pause);


} else {


btnState.setImageResource(R.drawable.play);


}


getVideoFile(playList, new File("/sdcard/"));


if (android.os.Environment.getExternalStorageState().equals(


android.os.Environment.MEDIA_MOUNTED)) {


Cursor cursor = getContentResolver()


.query(videoListUri,


new String[]{"_display_name", "_data"}, null,


null, null);


int n = cursor.getCount();


cursor.moveToFirst();


LinkedList<VideoInfo> playList2 = new LinkedList<VideoInfo>();


for (int i = 0; i != n; ++i) {


VideoInfo videoInfo = new VideoInfo(cursor.getString(cursor


.getColumnIndex("_display_name")), cursor.getString(cursor.getColumnIndex("_data")));


playList2.add(videoInfo);


cursor.moveToNext();


}


if (playList2.size() > playList.size()) {


playList = playList2;


}


}


videoView.setMySizeChangeLinstener(new VideoView.MySizeChangeLinstener() {


@Override


public void doMyThings() {


setVideoScale(SCREEN_DEFAULT);


}


});


btnList.setAlpha(0xBB);


btnPrevious.setAlpha(0xBB);


btnState.setAlpha(0xBB);


btnNext.setAlpha(0xBB);


mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);


maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);


currentVolume = mAudioManager


.getStreamVolume(AudioManager.STREAM_MUSIC);


btnVolume.setAlpha(getAlphaByVolume());


btnList.setOnClickListener(new OnClickListener() {


@Override


public void onClick(View arg0) {


Intent intent = new Intent();


intent.setClass(VideoPlayerActivity.this,


VideoChooseActivity.class);


VideoPlayerActivity.this.startActivityForResult(intent, 0);


cancelDelayHide();


}


});


btnNext.setOnClickListener(myOnClickListener);


btnState.setOnClickListener(new OnClickListener() {


@Override


public void onClick(View v) {


cancelDelayHide();


if (isPaused) {


videoView.start();


btnState.setImageResource(R.drawable.pause);


hideControllerDelay();


} else {


videoView.pause();


btnState.setImageResource(R.drawable.play);


}


isPaused = !isPaused;


}


});


btnPrevious.setOnClickListener(myOnClickListener);


btnVolume.setOnClickListener(new OnClickListener() {


@Override


public void onClick(View v) {


cancelDelayHide();


if (isSoundShow) {


popupVolume.dismiss();


} else {


if (popupVolume.isShowing()) {


popupVolume.update(15, 0, VolumeView.MY_WIDTH,


VolumeView.MY_HEIGHT);


} else {


popupVolume.showAtLocation(videoView, Gravity.RIGHT


| Gravity.CENTER_VERTICAL, 15, 0);


popupVolume.update(15, 0, VolumeView.MY_WIDTH,


VolumeView.MY_HEIGHT);


}


}


isSoundShow = !isSoundShow;


hideControllerDelay();


}


});


btnVolume.setOnLongClickListener(new OnLongClickListener() {


@Override


public boolean onLongClick(View arg0) {


if (isSilent) {


btnVolume.setImageResource(R.drawable.soundenable);


} else {


btnVolume.setImageResource(R.drawable.sounddisable);


}


isSilent = !isSilent;


updateVolume(currentVolume);


cancelDelayHide();


hideControllerDelay();


return true;


}


});


seekBar = (SeekBar) controlView.findViewById(R.id.seekbar);


seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {


@Override


public void onProgressChanged(SeekBar seekbar, int progress,


boolean fromUser) {


if (fromUser) {


if (!isOnline) {


videoView.seekTo(progress);


}


}


}


@Override


public void onStartTrackingTouch(SeekBar arg0) {


myHandler.removeMessages(HIDE_CONTROLER);


}


@Override


public void onStopTrackingTouch(SeekBar seekBar) {


myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);


}


});


getScreenSize();


mGestureDetector = new GestureDetector(new SimpleOnGestureListener() {


@Override


public boolean onDoubleTap(MotionEvent e) {


if (isFullScreen) {


setVideoScale(SCREEN_DEFAULT);


} else {


setVideoScale(SCREEN_FULL);


}


isFullScreen = !isFullScreen;


Log.d(TAG, "onDoubleTap");


if (isControllerShow) {


showController();


}


// return super.onDoubleTap(e);


return true;


}


@Override


public boolean onSingleTapConfirmed(MotionEvent e) {


if (!isControllerShow) {


showController();


hideControllerDelay();


} else {


cancelDelayHide();


hideController();


}


// return super.onSingleTapConfirmed(e);


return true;


}


@Override


public void onLongPress(MotionEvent e) {


if (isPaused) {


videoView.start();


btnState.setImageResource(R.drawable.pause);


cancelDelayHide();


hideControllerDelay();


} else {


videoView.pause();


btnState.setImageResource(R.drawable.play);


cancelDelayHide();


showController();


}


isPaused = !isPaused;


// super.onLongPress(e);


}


});


// vv.setVideoPath("http://202.108.16.171/cctv/video/A7/E8/69/27/A7E86927D2BF4D2FA63471D1C5F97D36/gphone/480_320/200/0.mp4");


videoView.setOnPreparedListener(new OnPreparedListener() {


@Override


public void onPrepared(MediaPlayer arg0) {


setVideoScale(SCREEN_DEFAULT);


isFullScreen = false;


if (isControllerShow) {


showController();


}


int i = videoView.getDuration();


Log.d("onCompletion", "" + i);


seekBar.setMax(i);


i /= 1000;


int minute = i / 60;


int hour = minute / 60;


int second = i % 60;


minute %= 60;


textTimeTotal.setText(String.format("%02d:%02d:%02d", hour,


minute, second));


/*


  • controler.showAtLocation(vv, Gravity.BOTTOM, 0, 0);

  • controler.update(screenWidth, controlHeight);

  • myHandler.sendEmptyMessageDelayed(HIDE_CONTROLER, TIME);


*/


videoView.start();


btnState.setImageResource(R.drawable.pause);


hideControllerDelay();


myHandler.sendEmptyMessage(PROGRESS_CHANGED);


}


});


videoView.setOnCompletionListener(new OnCompletionListener() {


@Override


public void onCompletion(MediaPlayer arg0) {


int n = playList.size();


isOnline = false;


if (++position < n) {


videoView.setVideoPath(playList.get(position).getPath());


} else {


videoView.stopPlayback();


VideoPlayerActivity.this.finish();


}


}


});


}


@Override


protected void onResume() {


if (!isChangedVideo) {


videoView.seekTo(playedTime);


videoView.start();


} else {


isChangedVideo = false;


}


// if(videoView.getVideoHeight()!=0){


if (videoView.isPlaying()) {


btnState.setImageResource(R.drawable.pause);


hideControllerDelay();


}


if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {


setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


}


super.onResume();


}


@Override


protected void onDestroy() {


if (popupControl.isShowing()) {


popupControl.dismiss();


extralWindow.dismiss();


}


if (popupVolume.isShowing()) {


popupVolume.dismiss();


}


myHandler.removeMessages(PROGRESS_CHANGED);


myHandler.removeMessages(HIDE_CONTROLER);


if (videoView.isPlaying()) {


videoView.stopPlayback();


}


playList.clear();


super.onDestroy();


}


@Override


protected void onActivityResult(int requestCode, int resultCode, Intent data) {


if (requestCode == 0 && resultCode == Activity.RESULT_OK) {


videoView.stopPlayback();


int result = data.getIntExtra("CHOOSE", -1);


Log.d("RESULT", "" + result);


if (result != -1) {


isOnline = false;


isChangedVideo = true;


videoView.setVideoPath(playList.get(result).getPath());


position = result;


} else {


String url = data.getStringExtra("CHOOSE_URL");


if (url != null) {


videoView.setVideoPath(url);


isOnline = true;


isChangedVideo = true;


}


}


return;


}


super.onActivityResult(requestCode, resultCode, data);


}


private final static int PROGRESS_CHANGED = 0;


private final static int HIDE_CONTROLER = 1;


Handler myHandler = new Handler() {


@Override


public void handleMessage(Message msg) {


switch (msg.what) {


case PROGRESS_CHANGED:


int i = videoView.getCurrentPosition();


seekBar.setProgress(i);


if (isOnline) {


int j = videoView.getBufferPercentage();


seekBar.setSecondaryProgress(j * seekBar.getMax() / 100);


} else {


seekBar.setSecondaryProgress(0);


}


i /= 1000;


int minute = i / 60;


int hour = minute / 60;


int second = i % 60;


minute %= 60;


textTimePlay.setText(String.format("%02d:%02d:%02d", hour,


minute, second));


sendEmptyMessageDelayed(PROGRESS_CHANGED, 100);


break;


case HIDE_CONTROLER:


hideController();


break;


}


super.handleMessage(msg);

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android VideoPlayer