package com.pan.simplepicture.view.activity;
import android.content.pm.ActivityInfo;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.Process;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
import com.avos.avoscloud.AVObject;
import com.baidu.cyberplayer.core.BVideoView;
import com.baidu.cyberplayer.core.BVideoView.OnCompletionListener;
import com.baidu.cyberplayer.core.BVideoView.OnErrorListener;
import com.baidu.cyberplayer.core.BVideoView.OnInfoListener;
import com.baidu.cyberplayer.core.BVideoView.OnPlayingBufferCacheListener;
import com.baidu.cyberplayer.core.BVideoView.OnPreparedListener;
import com.facebook.drawee.view.SimpleDraweeView;
import com.pan.simplepicture.ConstantValue;
import com.pan.simplepicture.R;
import com.pan.simplepicture.adapter.PlayFragmentAdapter;
import com.pan.simplepicture.bean.YouKu;
import com.pan.simplepicture.inter.AbsVideoRes;
import com.pan.simplepicture.presenter.BasePresenter;
import com.pan.simplepicture.presenter.PlayPresenter;
import com.pan.simplepicture.utils.AppUtils;
import com.pan.simplepicture.utils.ContextUtils;
import com.pan.simplepicture.utils.FrecsoUtils;
import com.pan.simplepicture.utils.MD5Utils;
import com.pan.simplepicture.utils.ScreenUtils;
import com.pan.simplepicture.utils.SharedPreferencesUtils;
import com.pan.simplepicture.utils.UserManager;
import com.pan.simplepicture.view.fragment.CommentFragment;
import com.pan.simplepicture.view.fragment.VideoDesFragment;
import com.pan.simplepicture.view.fragment.VideoListFragment;
import com.pan.simplepicture.view.impl.IPlayView;
import com.pan.simplepicture.widget.AlertDialog;
import com.pan.simplepicture.widget.CustomDialog;
import com.pan.simplepicture.widget.shimmer.Shimmer;
import com.pan.simplepicture.widget.shimmer.ShimmerTextView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.Bind;
import butterknife.ButterKnife;
import de.greenrobot.event.EventBus;
/**
* 播放页
*
* @author pan
*/
public class PlayActivity extends BaseActivity implements OnPreparedListener,
OnCompletionListener, OnErrorListener, OnInfoListener,
OnPlayingBufferCacheListener, IPlayView {
private final String TAG = "VideoViewPlayingActivity";
private AbsVideoRes mVideoRes;
@Override
public void getIntentValue() {
super.getIntentValue();
mVideoRes = (AbsVideoRes) getIntent()
.getParcelableExtra("video");
}
private ActionBar mActionBar;
@Override
public void setActionBar() {
//set the back arrow in the toolbar
mActionBar = getSupportActionBar();
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(false);
}
@Override
protected boolean isSetStatusBar() {
return true;
}
@Override
public int getToolBarId() {
return R.id.toolbar;
}
@Override
public BasePresenter getPresenter() {
return new PlayPresenter();
}
@Override
public int getContentLayout() {
return R.layout.activity_play;
}
@Bind(R.id.tabs)
TabLayout mTabLayout;
@Bind(R.id.mViewPager)
ViewPager mViewPager;
@Bind(R.id.layout_play)
RelativeLayout layout_play;
@Bind(R.id.rl_container)
RelativeLayout rl_container;
@Bind(R.id.video_view)
BVideoView mVV;
@Bind(R.id.controlbar)
RelativeLayout mController;
@Bind(R.id.play_btn)
ImageButton mPlaybtn;
@Bind(R.id.time_current)
TextView mCurrPostion;
@Bind(R.id.media_progress)
SeekBar mProgress;
@Bind(R.id.time_total)
TextView mDuration;
@Bind(R.id.zoom_btn)
Button zoom_btn;
@Bind(R.id.VideoAction)
RelativeLayout VideoAction;
@Bind(R.id.detailPic)
SimpleDraweeView detailPic;
@Bind(R.id.pre_play_button)
ImageButton pre_play_button;
@Bind(R.id.shimmer_tv)
ShimmerTextView shimmer_tv;
@Bind(R.id.layout_info)
RelativeLayout layout_info;
@Bind(R.id.small_pic)
SimpleDraweeView small_pic;
@Bind(R.id.tv_info_title)
TextView tv_info_title;
@Bind(R.id.tv_info_update)
TextView tv_info_update;
@Bind(R.id.tv_info_area)
TextView tv_info_area;
@Bind(R.id.tv_info_main)
TextView tv_info_main;
@Bind(R.id.tv_info_count)
TextView tv_info_count;
@Bind(R.id.tv_info_des)
TextView tv_info_des;
public void showHeader(int i) {
if (0 == i) {
layout_play.setVisibility(View.VISIBLE);
layout_info.setVisibility(View.GONE);
} else {
layout_play.setVisibility(View.GONE);
layout_info.setVisibility(View.VISIBLE);
}
}
public void setInfo(YouKu youku) {
tv_info_title.setText(youku.title = mVideoRes.getVideoTitle());
tv_info_update.setText(youku.update);
tv_info_area.setText("地区:" + youku.area);
if (TextUtils.isEmpty(youku.play_Count) || "null".equals(youku.play_Count)) {
tv_info_count.setVisibility(View.GONE);
} else {
tv_info_count.setText(youku.play_Count + "万次播放");
}
tv_info_des.setText(youku.des = mVideoRes.getVideoDes());
if (TextUtils.isEmpty(youku.mainPeople)) {
tv_info_main.setVisibility(View.GONE);
} else {
tv_info_main.setText("主持人:" + youku.mainPeople);
}
FrecsoUtils.loadImage(mVideoRes.getSmallVideoThumbnail(), small_pic);
setupViewPager(youku.data);
}
public void setupViewPager(List<? extends AbsVideoRes> data) {
String[] titles = getResources().getStringArray(R.array.play_tab);
titles[0] = titles[0] + "(" + data.size() + ")";
List<Fragment> list = new ArrayList<Fragment>();
VideoListFragment fragment = new VideoListFragment();
fragment.setRes(data);
list.add(fragment);
CommentFragment commentFragment = new CommentFragment();
commentFragment.setResId(mVideoRes.getVideoId());
list.add(commentFragment);
PlayFragmentAdapter adapter =
new PlayFragmentAdapter(getSupportFragmentManager(), Arrays.asList(titles), list);
mViewPager.setAdapter(adapter);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabsFromPagerAdapter(adapter);
}
private void setupDesViewPager(AbsVideoRes data) {
String[] titles = getResources().getStringArray(R.array.play_tab);
titles[0] = "简介";
List<Fragment> list = new ArrayList<Fragment>();
VideoDesFragment fragment = new VideoDesFragment();
fragment.setRes(data);
list.add(fragment);
CommentFragment commentFragment = new CommentFragment();
commentFragment.setResId(mVideoRes.getVideoId());
list.add(commentFragment);
PlayFragmentAdapter adapter =
new PlayFragmentAdapter(getSupportFragmentManager(), Arrays.asList(titles), list);
mViewPager.setAdapter(adapter);
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabsFromPagerAdapter(adapter);
}
public boolean getFlag() {
return flag;
}
private boolean flag;
public void onEventMainThread(AbsVideoRes res) {
flag = true;
/* if (res.getType() == 2) {
setVideoSource(res.getUrl());
sendPlayMessage(true);
} else*/ if (res.getType() == 2||res.getType() == 100) {
Map<String, String> params = new HashMap<String, String>();
params.put("url", res.getUrl());
params.put("format", "normal");
((PlayPresenter) mPresenter).getBaozouRealUrl(this, params);
} else {
Map<String, String> params = new HashMap<String, String>();
/* params.put("deviceModel", Build.MODEL.replace(" ", "+"));
params.put("plamformVersion", Build.VERSION.RELEASE);
params.put("deviceName", Build.MANUFACTURER);
params.put("plamform", "Android");
params.put("link", res.getUrl());
params.put("rsId", res.getVideoId());
params.put("imieId", MD5Utils.MD5(ConstantValue.str + ConstantValue.str));
((PlayPresenter) mPresenter).getVideoUrl(this, params);*/
params.put("url", res.getUrl());
((PlayPresenter) mPresenter).getRealAddress(this, params);
showHeader(0);
}
}
@Override
public void bindView(Bundle savedInstanceState) {
EventBus.getDefault().register(this);
initPlay();
if (mPresenter == null && !(mPresenter instanceof PlayPresenter))
return;
FrecsoUtils.loadImage(mVideoRes.getVideoThumbnail(), detailPic);
if (0 == mVideoRes.getType()) {
setupDesViewPager(mVideoRes);
setVideoSource(mVideoRes.getUrl());
((PlayPresenter) mPresenter).play(this);
return;
} else if (1 == mVideoRes.getType()) {
setupDesViewPager(mVideoRes);
Map<String, String> params = new HashMap<String, String>();
params.put("deviceModel", Build.MODEL.replace(" ", "+"));
params.put("plamformVersion", Build.VERSION.RELEASE);
params.put("deviceName", Build.MANUFACTURER);
params.put("plamform", "Android");
params.put("link", mVideoRes.getUrl());
params.put("rsId", mVideoRes.getVideoId());
params.put("imieId", MD5Utils.MD5(ConstantValue.str + ConstantValue.str));
((PlayPresenter) mPresenter).getVideoUrl(this, params);
return;
} else if (2 == mVideoRes.getType() || 100 == mVideoRes.getType()) {
Map<String, String> params = new HashMap<String, String>();
params.put("id", mVideoRes.getVideoId());
params.put("version", "v2");
params.put("type", String.valueOf(mVideoRes.getType()));
((PlayPresenter) mPresenter).getBaozouVideoInfo(this, params);
} else if (3 == mVideoRes.getType()) {
showHeader(1);
Map<String, String> params = new HashMap<String, String>();
params.put("url", mVideoRes.getUrl());
params.put("_log_sid", mVideoRes.getVideoId());
((PlayPresenter) mPresenter).getYoukuVideoInfo(params);
}
pre_play_button.setVisibility(View.GONE);
}
@Override
public void setVideoSource(String mVideoSource) {
this.mVideoSource = mVideoSource;
}
/***************************************** 百度视频sdk ************************************************************/
/**
* 您的ak
*/
private String AK = "t207G26112s0cbhYjtDuxBP7";
/**
* //您的sk的前16位
*/
private String SK = "9s4Eof8Os1zvEht4ybem6U64Sw0R3Xtc";
private String mVideoSource = null;
/**
* 记录播放位置
*/
private int mLastPos = 0;
/**
* 播放状态
*/
private enum PLAYER_STATUS {
PLAYER_IDLE, PLAYER_PREPARING, PLAYER_PREPARED,
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.comment:
// shareVideo();
if (!UserManager.getInstance().isLogin()) {
Toast.makeText(this, "please login first in Home-Page !", Toast.LENGTH_LONG).show();
return super.onOptionsItemSelected(item);
}
showCommentDialog();
break;
}
return super.onOptionsItemSelected(item);
}
private void showCommentDialog() {
View view = ContextUtils.inflate(this, R.layout.send_comment_dialog);
final EditText et_content = ButterKnife.findById(view, R.id.et_content);
final TextView tv_length = ButterKnife.findById(view, R.id.tv_length);
final Button comment_button = ButterKnife.findById(view, R.id.comment_button);
comment_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
String content = et_content.getText().toString().trim();
if (TextUtils.isEmpty(content)) {
Toast.makeText(PlayActivity.this, "please input your comment first !", Toast.LENGTH_LONG).show();
return;
}
Map<String, String> params = new HashMap<String, String>();
object = new AVObject("Comment");
params.put("class", "Comment");
params.put("content", content);
object.put("content", content);
params.put("rsId", mVideoRes.getVideoId());
object.put("rsId", mVideoRes.getVideoId());
String time = String.valueOf(System.currentTimeMillis());
params.put("published", time);
object.put("published", time);
params.put("location", UserManager.getInstance().getUser().location);
object.put("location", UserManager.getInstance().getUser().location);
params.put("gender", UserManager.getInstance().getUser().gender);
object.put("gender", UserManager.getInstance().getUser().gender);
params.put("screen_name", UserManager.getInstance().getUser().screen_name);
object.put("screen_name", UserManager.getInstance().getUser().screen_name);
params.put("profile_image_url", UserManager.getInstance().getUser().profile_image_url);
object.put("profile_image_url", UserManager.getInstance().getUser().profile_image_url);
((PlayPresenter) mPresenter).sendComment(params);
}
});
et_content.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence == null) {
tv_length.setText("0/70");
} else {
tv_length.setText(charSequence.toString().length() + "/70");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
dialog = new CustomDialog(this, view, ScreenUtils.getInstance(this).getWidth() - ContextUtils.dip2px(this, 20), ContextUtils.dip2px(this, 280), Gravity.CENTER);
dialog.show();
}
private AVObject object;
public void showCommentSuccess() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
dialog = null;
if (object != null) {
EventBus.getDefault().post(object);
object = null;
}
}
}
private CustomDialog dialog;
private boolean isSharePause = false;
private PLAYER_STATUS mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE;
private EventHandler mEventHandler;
private HandlerThread mHandlerThread;
private final Object SYNC_Playing = new Object();
private WakeLock mWakeLock = null;
private static final String POWER_LOCK = "VideoViewPlayingActivity";
private static final int UI_CONTROLLER_INVISIBLE = 0;
private final int EVENT_PLAY = 0;
private final int UI_EVENT_UPDATE_CURRPOSITION = 1;
class EventHandler extends Handler {
public EventHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case EVENT_PLAY:
/**
* 如果已经播放了,等待上一次播放结束
*/
if (mPlayerStatus != PLAYER_STATUS.PLAYER_IDLE) {
synchronized (SYNC_Playing) {
try {
SYNC_Playing.wait();
Log.v(TAG, "wait player status to idle");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 设置播放url
*/
mVV.setVideoPath(mVideoSource);
/**
* 续播,如果需要如此
*/
if (mLastPos > 0) {
mVV.seekTo(mLastPos);
mLastPos = 0;
}
/**
* 显示或者隐藏缓冲提示
*/
mVV.showCacheInfo(true);
/**
* 开始播放
*/
mVV.start();
mPlayerStatus = PLAYER_STATUS.PLAYER_PREPARING;
break;
default:
break;
}
}
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
onHandleMessage(msg);
}
};
public void onHandleMessage(Message msg) {
switch (msg.what) {
/**
* 更新进度及时间
*/
case UI_EVENT_UPDATE_CURRPOSITION:
if (mVV.isPlaying()) {
int currPosition = mVV.getCurrentPosition();
int duration = mVV.getDuration();
updateTextViewWithTimeFormat(mCurrPostion, currPosition);
updateTextViewWithTimeFormat(mDuration, duration);
mProgress.setMax(duration);
mProgress.setProgress(currPosition);
}
mHandler.sendEmptyMessageDelayed(UI_EVENT_UPDATE_CURRPOSITION, 500);
break;
/**
* 隐藏控制UI
*/
case UI_CONTROLLER_INVISIBLE:
if (mVV.isPlaying()) {
updateControlBar(false);
}
break;
default:
break;
}
}
protected void initPlay() {
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE, POWER_LOCK);
initUI();
/**
* 开启后台事件处理线程
*/
mHandlerThread = new HandlerThread("event handler thread",
Process.THREAD_PRIORITY_BACKGROUND);
mHandlerThread.start();
mEventHandler = new EventHandler(mHandlerThread.getLooper());
}
@Override
public void sendPlayMessage(boolean auto_Play) {
if (!auto_Play) {
return;
}
int flag = AppUtils.isWifi(this);
boolean b = SharedPreferencesUtils.getBoolean(this, "prompt__not_wifi",
true);
if (flag == 2 && b) {
new AlertDialog(this).builder().setTitle("温馨提示")
.setMsg("当前播放使用的是非wifi环境(如果不想再提示,可以进入设置页面设置),确定继续?")
.setPositiveButton("继续", new OnClickListener() {
@Override
public void onClick(View v) {
play();
}
}).setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(View v) {
}
}).show();
return;
}
play();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.video, menu);
return super.onCreateOptionsMenu(menu);
}
private boolean isReplay;
private void play() {
if (mVV.isPlaying() || mPlayerStatus == PLAYER_STATUS.PLAYER_PREPARING) {
isReplay = true;
release();
return;
}
mHandler.post(new Runnable() {
@Override
public void run() {
pre_play_button.setVisibility(View.GONE);
VideoAction.setVisibility(View.GONE);
mPlaybtn.setBackgroundResource(R.drawable.pause_btn_style);
shimmer.cancel();
}
});
mEventHandler.sendEmptyMessage(EVENT_PLAY);
}
// 我的收藏,缓存,意见反馈,检测新版本,评论
private boolean isFullScreen = false;
/**
* 初始化界面
*/
private void initUI() {
shimmer = new Shimmer();
shimmer.start(shimmer_tv);
registerCallbackForControl();
/**
* 设置ak及sk的前16位
*/
BVideoView.setAKSK(AK, SK);
/**
* 获取BVideoView对象
*/
mVV.requestFocus();
/**
* 注册listener
*/
mVV.setOnPreparedListener(this);
mVV.setOnCompletionListener(this);
mVV.setOnErrorListener(this);
mVV.setOnInfoListener(this);
mVV.setVideoScalingMode(1);
/**
* 设置解码模式
*/
mVV.setDecodeMode(BVideoView.DECODE_SW);
}
private class PlayOnclickListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mVV.isPlaying()) {
mPlaybtn.setBackgroundResource(R.drawable.play_btn_style);
/**
* 暂停播放
*/
videoPause();
} else {
mPlaybtn.setBackgroundResource(R.drawable.pause_btn_style);
/**
* 继续播放
*/
videoResume();
}
}
}
private void changeScreen() {
if (isFullScreen) {
setMinScreen();
} else {
setFullScreen();
}
}
// 切换为全屏
private void setFullScreen() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setStatusBarTintRes(android.R.color.transparent);
getWindow().addFlags(1024);
mActionBar.hide();
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
getWindowManager().getDefaultDisplay().getWidth(),
getWindowManager().getDefaultDisplay().getHeight());
mVV.setLayoutParams(layoutParams);
mController.setLayoutParams(layoutParams);
VideoAction.setLayoutParams(layoutParams);
zoom_btn.setBackgroundResource(R.drawable.screensize_zoomin_button);
rl_container.setFocusable(true);
rl_container.setFocusableInTouchMode(true);
rl_container.requestFocus();
isFullScreen = true;
}
// 切换为小屏幕
private void setMinScreen() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setStatusBarTintRes(R.color.material_drawer_primary);
getWindow().clearFlags(1024);
mActionBar.show();
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
getWindowManager().getDefaultDisplay().getWidth(),
getResources().getDimensionPixelSize(R.dimen.video_play_heigh));
mVV.setLayoutParams(layoutParams);
mController.setLayoutParams(layoutParams);
VideoAction.setLayoutParams(layoutParams);
zoom_btn.setBackgroundResource(R.drawable.screensize_zoomout_button);
isFullScreen = false;
}
/**
* 为控件注册回调处理函数
*/
private void registerCallbackForControl() {
PlayOnclickListener playListener = new PlayOnclickListener();
rl_container.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
updateControlBar(!barShow);
}
});
mPlaybtn.setOnClickListener(playListener);
zoom_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
changeScreen();
}
});
pre_play_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
sendPlayMessage(true);
}
});
OnSeekBarChangeListener osbc1 = new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
// Log.v(TAG, "progress: " + progress);
updateTextViewWithTimeFormat(mCurrPostion, progress);
}
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
/**
* SeekBar开始seek时停止更新
*/
mHandler.removeMessages(UI_EVENT_UPDATE_CURRPOSITION);
}
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
int iseekPos = seekBar.getProgress();
/**
* SeekBark完成seek时执行seekTo操作并更新界面
*
*/
mVV.seekTo(iseekPos);
Log.v(TAG, "seek to " + iseekPos);
mHandler.sendEmptyMessage(UI_EVENT_UPDATE_CURRPOSITION);
}
};
mProgress.setOnSeekBarChangeListener(osbc1);
}
private void updateTextViewWithTimeFormat(TextView view, int second) {
int hh = second / 3600;
int mm = second % 3600 / 60;
int ss = second % 60;
String strTemp = null;
if (0 != hh) {
strTemp = String.format("%02d:%02d:%02d", hh, mm, ss);
} else {
strTemp = String.format("%02d:%02d", mm, ss);
}
view.setText(strTemp);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
/**
* 在停止播放前 你可以先记录当前播放的位置,以便以后可以续播
*/
if (mVV.isPlaying()) {
mLastPos = mVV.getCurrentPosition();
mVV.stopPlayback();
}
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.v(TAG, "onResume");
if (null != mWakeLock && (!mWakeLock.isHeld())) {
mWakeLock.acquire();
}
/**
* 发起一次播放任务,当然您不一定要在这发起
*/
if (!mVV.isPlaying() && mLastPos != 0) {
sendPlayMessage(true);
}
}
// private long mTouchTime;
private boolean barShow = true;
private Shimmer shimmer;
private boolean auto_Play = false;
/*
* @Override public boolean onTouchEvent(MotionEvent event) {
*
* // TODO Auto-generated method stub if (event.getAction() ==
* MotionEvent.ACTION_DOWN) mTouchTime = System.currentTimeMillis(); else if
* (event.getAction() == MotionEvent.ACTION_UP) { long time =
* System.currentTimeMillis() - mTouchTime; if (time < 400) {
* updateControlBar(!barShow); } }
*
* return false; }
*/
public void updateControlBar(boolean show) {
if (show) {
mController.setVisibility(View.VISIBLE);
mHandler.removeMessages(UI_CONTROLLER_INVISIBLE);
mHandler.sendEmptyMessageDelayed(UI_CONTROLLER_INVISIBLE, 3000);
} else {
mController.setVisibility(View.INVISIBLE);
}
barShow = show;
}
private void videoPause() {
if (mVV != null) {
mLastPos = mVV.getCurrentPosition();
mVV.pause();
}
}
private void videoResume() {
if (mVV != null) {
mLastPos = 0;
mVV.resume();
}
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
/**
* 退出后台事件处理线程
*/
mHandlerThread.quit();
EventBus.getDefault().unregister(this);
mViewPager.removeAllViews();
if (mVV != null && mVV.isPlaying())
releaseTask();
}
@Override
public boolean onInfo(int what, int extra) {
// TODO Auto-generated method stub
switch (what) {
/**
* 开始缓冲
*/
case BVideoView.MEDIA_INFO_BUFFERING_START:
break;
/**
* 结束缓冲
*/
case BVideoView.MEDIA_INFO_BUFFERING_END:
break;
default:
break;
}
return true;
}
/**
* 当前缓冲的百分比, 可以配合onInfo中的开始缓冲和结束缓冲来显示百分比到界面
*/
@Override
public void onPlayingBufferCache(int percent) {
// TODO Auto-generated method stub
}
/**
* 播放出错
*/
@Override
public boolean onError(int what, int extra) {
// TODO Auto-generated method stub
Log.v(TAG, "onError");
synchronized (SYNC_Playing) {
SYNC_Playing.notify();
}
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(PlayActivity.this, "服务器被大家蹂躏了哦...", Toast.LENGTH_SHORT).show();
}
});
releaseTask();
return true;
}
/**
* 播放完成
*/
@Override
public void onCompletion() {
// TODO Auto-generated method stub
Log.v(TAG, "onCompletion");
synchronized (SYNC_Playing) {
SYNC_Playing.notify();
}
if (isReplay) {
isReplay = false;
mEventHandler.sendEmptyMessageDelayed(EVENT_PLAY, 1000);
} else {
releaseTask();
}
}
private void releaseTask() {
release();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
VideoAction.setVisibility(View.VISIBLE);
pre_play_button.setVisibility(View.VISIBLE);
shimmer.start(shimmer_tv);
}
}, 1000);
}
private void release() {
mVV.stopPlayback();
mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE;
mHandler.removeMessages(UI_EVENT_UPDATE_CURRPOSITION);
}
/**
* 准备播放就绪
*/
@Override
public void onPrepared() {
// TODO Auto-generated method stub
Log.v(TAG, "onPrepared");
mPlayerStatus = PLAYER_STATUS.PLAYER_PREPARED;
mHandler.sendEmptyMessage(UI_EVENT_UPDATE_CURRPOSITION);
}
@Override
public void onBackPressed() {
if (isFullScreen) {
setMinScreen();
} else {
super.onBackPressed();
}
}
}