package com.atguigu.mobileplayer1020.activity; import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Vibrator; import android.util.DisplayMetrics; import android.util.Log; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import com.atguigu.mobileplayer1020.R; import com.atguigu.mobileplayer1020.bean.MediaItem; import com.atguigu.mobileplayer1020.utils.Utils; import com.atguigu.mobileplayer1020.view.VideoView; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; public class SystemVideoPlayerActivity extends Activity implements View.OnClickListener { private static final String TAG = SystemVideoPlayerActivity.class.getSimpleName();//"SystemVideoPlayerActivity; /** * 视频默认屏幕大小播放 */ private static final int VIDEO_TYPE_DEFAULT = 1; /** * 视频全屏播放 */ private static final int VIDEO_TYPE_FULL = 2; private VideoView videoview; /** * 进度跟新 */ private static final int PROGRESS = 0; /** * 隐藏控制面板 */ private static final int HIDE_MEDIA_CONTROLLER = 1; /** * 显示网络速度 */ private static final int SHOW_NET_SPEED = 3; private LinearLayout llTop; private TextView tvName; private ImageView ivBattery; private TextView tvSystetime; private Button btnVoice; private SeekBar seekbarVoice; private Button btnSwichePlayer; private LinearLayout llBottom; private TextView tvCurrenttime; private SeekBar seekbarVideo; private TextView tvDuration; private Button btnExit; private Button btnPre; private Button btnStartPause; private Button btnNext; private Button btnSwichScreen; private TextView tv_loading; private LinearLayout ll_loading; private LinearLayout ll_buffer; private TextView tv_buffer; private Utils utils; private MyBroadcastReceiver receiver; /** * 列表数据 */ private ArrayList<MediaItem> mediaItems; private int position; private GestureDetector detector; /** * 是否显示控制面板 */ private boolean isShowMediaController = false; /** * 视频是否全屏显示 */ private boolean isFullScreen = false; private int screenWidth = 0; private int screeHeight = 0; private int videoWidth = 0; private int videoHeight = 0; /** * 音频管理者 */ private AudioManager am; /** * 当前音量 */ private int currentVolume; /** * 最大音量:0~15 */ private int maxVolume; /** * 是否静音 */ private boolean isMute = false; /** * 是否网络视频 */ private boolean isNetUrl; /** * 震动 */ private Vibrator vibrator; /** * Find the Views in the layout<br /> * <br /> * Auto-created on 2017-01-09 09:33:35 by Android Layout Finder * (http://www.buzzingandroid.com/tools/android-layout-finder) */ private void findViews() { setContentView(R.layout.activity_system_video_player); videoview = (VideoView) findViewById(R.id.videoview); llTop = (LinearLayout) findViewById(R.id.ll_top); tvName = (TextView) findViewById(R.id.tv_name); ivBattery = (ImageView) findViewById(R.id.iv_battery); tvSystetime = (TextView) findViewById(R.id.tv_systetime); btnVoice = (Button) findViewById(R.id.btn_voice); seekbarVoice = (SeekBar) findViewById(R.id.seekbar_voice); btnSwichePlayer = (Button) findViewById(R.id.btn_swiche_player); llBottom = (LinearLayout) findViewById(R.id.ll_bottom); tvCurrenttime = (TextView) findViewById(R.id.tv_currenttime); seekbarVideo = (SeekBar) findViewById(R.id.seekbar_video); tvDuration = (TextView) findViewById(R.id.tv_duration); btnExit = (Button) findViewById(R.id.btn_exit); btnPre = (Button) findViewById(R.id.btn_pre); btnStartPause = (Button) findViewById(R.id.btn_start_pause); btnNext = (Button) findViewById(R.id.btn_next); btnSwichScreen = (Button) findViewById(R.id.btn_swich_screen); ll_loading = (LinearLayout) findViewById(R.id.ll_loading); tv_loading = (TextView) findViewById(R.id.tv_loading); ll_buffer = (LinearLayout) findViewById(R.id.ll_buffer); tv_buffer = (TextView) findViewById(R.id.tv_buffer); btnVoice.setOnClickListener(this); btnSwichePlayer.setOnClickListener(this); btnExit.setOnClickListener(this); btnPre.setOnClickListener(this); btnStartPause.setOnClickListener(this); btnNext.setOnClickListener(this); btnSwichScreen.setOnClickListener(this); hideMediaController();//隐藏控制面板 //获取音频的最大值15,当前值 am = (AudioManager) getSystemService(AUDIO_SERVICE); currentVolume = am.getStreamVolume(AudioManager.STREAM_MUSIC); maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //和SeekBar关联 seekbarVoice.setMax(maxVolume); Log.e("TAG", maxVolume + "----------"); seekbarVoice.setProgress(currentVolume); //发消息 handler.sendEmptyMessage(SHOW_NET_SPEED); } /** * 视频播放地址 */ private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(TAG, "onCreate"); initData(); findViews(); getData(); //设置视频加载的监听 setLinstener(); setData(); } private void initData() { utils = new Utils(); //注册监听电量广播 receiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter(); //监听电量变化 filter.addAction(Intent.ACTION_BATTERY_CHANGED); registerReceiver(receiver, filter); //初始化手势识别器 detector = new GestureDetector(this, new MySimpleOnGestureListener()); //得到屏幕的宽和高 DisplayMetrics outMetrics = new DisplayMetrics(); //得到屏幕参数类 getWindowManager().getDefaultDisplay().getMetrics(outMetrics); //屏幕的宽和高 screenWidth = outMetrics.widthPixels; screeHeight = outMetrics.heightPixels; } class MySimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public void onLongPress(MotionEvent e) { super.onLongPress(e); // Toast.makeText(SystemVideoPlayerActivity.this, "我被长按了", Toast.LENGTH_SHORT).show(); startAndPause(); } @Override public boolean onDoubleTap(MotionEvent e) { // Toast.makeText(SystemVideoPlayerActivity.this, "我被双击了", Toast.LENGTH_SHORT).show(); if (isFullScreen) { //设置默认 setVideoType(VIDEO_TYPE_DEFAULT); } else { //全屏显示 setVideoType(VIDEO_TYPE_FULL); } return super.onDoubleTap(e); } @Override public boolean onSingleTapConfirmed(MotionEvent e) { // Toast.makeText(SystemVideoPlayerActivity.this, "我被单击", Toast.LENGTH_SHORT).show(); if (isShowMediaController) { //隐藏 hideMediaController(); //把消息移除 handler.removeMessages(HIDE_MEDIA_CONTROLLER); } else { //显示 showMediaController(); //重新发消息-4秒隐藏 handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); } return super.onSingleTapConfirmed(e); } } private void setVideoType(int videoTypeDefault) { switch (videoTypeDefault) { case VIDEO_TYPE_FULL: isFullScreen = true; videoview.setViewSize(screenWidth, screeHeight); //把按钮设置-默认 btnSwichScreen.setBackgroundResource(R.drawable.btn_screen_default_selector); break; case VIDEO_TYPE_DEFAULT://视频画面的默认 isFullScreen = false; //视频原始的画面大小 int mVideoWidth = videoWidth; int mVideoHeight = videoHeight; /** * 计算后的值 */ int width = screenWidth; int height = screeHeight; if (mVideoWidth * height < width * mVideoHeight) { //Log.i("@@@", "image too wide, correcting"); width = height * mVideoWidth / mVideoHeight; } else if (mVideoWidth * height > width * mVideoHeight) { //Log.i("@@@", "image too tall, correcting"); height = width * mVideoHeight / mVideoWidth; } //把计算好的视频大小传递过去 videoview.setViewSize(width, height); //把按钮设置-全屏 btnSwichScreen.setBackgroundResource(R.drawable.btn_screen_full_selector); break; } } /** * 显示控制面板 */ private void showMediaController() { isShowMediaController = true; llTop.setVisibility(View.VISIBLE); llBottom.setVisibility(View.VISIBLE); } /** * 隐藏控制面板 */ private void hideMediaController() { isShowMediaController = false; llTop.setVisibility(View.GONE); llBottom.setVisibility(View.GONE); } private int prePosition; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SHOW_NET_SPEED: String netSpeed = utils.showNetSpeed(SystemVideoPlayerActivity.this); //不为空 tv_loading.setText("正在加载...."+netSpeed); tv_buffer.setText("缓存中...."+netSpeed); removeMessages(SHOW_NET_SPEED); sendEmptyMessageDelayed(SHOW_NET_SPEED,1000); break; case HIDE_MEDIA_CONTROLLER: hideMediaController();//隐藏控制面板 break; case PROGRESS://视频播放进度的更新 int currentPosition = videoview.getCurrentPosition(); //设置视频更新 seekbarVideo.setProgress(currentPosition); //设置播放进度的时间 tvCurrenttime.setText(utils.stringForTime(currentPosition)); //得到系统的时间并且更新 tvSystetime.setText(getSystemTime()); //设置视频缓存经度更新 if (isNetUrl) { int buffer = videoview.getBufferPercentage();//0~100 //缓存进度 int secondaryProgress = buffer * seekbarVideo.getMax() / 100; seekbarVideo.setSecondaryProgress(secondaryProgress); } if (isNetUrl && videoview.isPlaying()) { int buffer = currentPosition - prePosition;//1000左右 //一秒之内播放的进度小于500毫秒就是卡了,否则不卡 if (buffer < 500) { //卡显示缓冲 ll_buffer.setVisibility(View.VISIBLE); } else { //不卡就隐藏 ll_buffer.setVisibility(View.GONE); } } prePosition = currentPosition; //不断发消息 removeMessages(PROGRESS); sendEmptyMessageDelayed(PROGRESS, 1000); break; } } }; /** * 得到系统的时间 * * @return */ private String getSystemTime() { SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); return format.format(new Date()); } class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //得到电量:0~100 int level = intent.getIntExtra("level", 0); //主线程 setBattery(level); } } /** * 设置电量 * * @param level */ private void setBattery(int level) { if (level <= 0) { ivBattery.setImageResource(R.drawable.ic_battery_0); } else if (level <= 10) { ivBattery.setImageResource(R.drawable.ic_battery_10); } else if (level <= 20) { ivBattery.setImageResource(R.drawable.ic_battery_20); } else if (level <= 40) { ivBattery.setImageResource(R.drawable.ic_battery_40); } else if (level <= 60) { ivBattery.setImageResource(R.drawable.ic_battery_60); } else if (level <= 80) { ivBattery.setImageResource(R.drawable.ic_battery_80); } else if (level <= 100) { ivBattery.setImageResource(R.drawable.ic_battery_100); } else { ivBattery.setImageResource(R.drawable.ic_battery_100); } } /** * Handle button click events<br /> * <br /> * Auto-created on 2017-01-09 09:33:35 by Android Layout Finder * (http://www.buzzingandroid.com/tools/android-layout-finder) */ @Override public void onClick(View v) { if (v == btnVoice) { // Handle clicks for btnVoice isMute = !isMute; updateVoice(currentVolume); } else if (v == btnSwichePlayer) { // Handle clicks for btnSwichePlayer showSwichPlayerDialog(); } else if (v == btnExit) { // Handle clicks for btnExit finish(); } else if (v == btnPre) {//上一个的点击事件 // Handle clicks for btnPre setPreVideo(); } else if (v == btnStartPause) { startAndPause(); // Handle clicks for btnStartPause } else if (v == btnNext) {//下一个的点击事件 // Handle clicks for btnNext setNextVideo(); } else if (v == btnSwichScreen) { // Handle clicks for btnSwichScreen if (isFullScreen) { //设置默认 setVideoType(VIDEO_TYPE_DEFAULT); } else { //全屏显示 setVideoType(VIDEO_TYPE_FULL); } } //移除消息 handler.removeMessages(HIDE_MEDIA_CONTROLLER); //重新发消息 handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); } private void showSwichPlayerDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提醒"); builder.setMessage("当前播放使用系统播放器播放,当播放出现有声音没有画面的时候,请切换万能播放器"); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startVitamioVideoPlayer(); } }); builder.show(); } private void startAndPause() { if (videoview.isPlaying()) {//是否在播放 //当前在播放要设置为暂停 videoview.pause(); //按钮状态-播放状态 btnStartPause.setBackgroundResource(R.drawable.btn_start_selector); } else { //当前暂停状态要设置播放状态 videoview.start(); //按钮状态-暂停状态 btnStartPause.setBackgroundResource(R.drawable.btn_pause_selector); } } @Override protected void onRestart() { super.onRestart(); Log.e(TAG, "onRestart"); } @Override protected void onStart() { super.onStart(); Log.e(TAG, "onStart"); } @Override protected void onResume() { super.onResume(); Log.e(TAG, "onResume"); } @Override protected void onPause() { super.onPause(); Log.e(TAG, "onPause"); } @Override protected void onStop() { super.onStop(); Log.e(TAG, "onStop"); } @Override protected void onDestroy() { Log.e(TAG, "onDestroy"); //是否资源-释放孩子的 if (receiver != null) { unregisterReceiver(receiver); receiver = null; } //消息移除 handler.removeCallbacksAndMessages(null); super.onDestroy(); } private void setData() { if (mediaItems != null && mediaItems.size() > 0) { //根据位置获取播放视频的对象 MediaItem mediaItem = mediaItems.get(position); videoview.setVideoPath(mediaItem.getData()); tvName.setText(mediaItem.getName()); isNetUrl = utils.isNetUrl(mediaItem.getData()); } else if (uri != null) { //设置播放地址 videoview.setVideoURI(uri); tvName.setText(uri.toString()); isNetUrl = utils.isNetUrl(uri.toString()); } checkButtonStatus(); } private void setLinstener() { //设置视频播放监听:准备好的监听,播放出错监听,播放完成监听 videoview.setOnPreparedListener(new MyOnPreparedListener()); videoview.setOnErrorListener(new MyOnErrorListener()); videoview.setOnCompletionListener(new MyOnCompletionListener()); //设置控制面板 // videoview.setMediaController(new MediaController(this)); //设置视频的拖动监听 seekbarVideo.setOnSeekBarChangeListener(new VideoOnSeekBarChangeListener()); //设置监听滑动声音 seekbarVoice.setOnSeekBarChangeListener(new VoiceOnSeekBarChangeListener()); //监听播放卡,Android2.3开始有 // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // videoview.setOnInfoListener(new MyOnInfoListener()); // } } // class MyOnInfoListener implements MediaPlayer.OnInfoListener{ // // @Override // public boolean onInfo(MediaPlayer mp, int what, int extra) { // switch (what){ // //播放卡,拖拽卡 // case MediaPlayer.MEDIA_INFO_BUFFERING_START: // ll_buffer.setVisibility(View.VISIBLE); // break; // //播放不卡了,拖拽不卡了 // case MediaPlayer.MEDIA_INFO_BUFFERING_END: // ll_buffer.setVisibility(View.GONE); // break; // } // return true; // } // } class VoiceOnSeekBarChangeListener implements SeekBar.OnSeekBarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { updateVoiceProgress(progress); } } /** * 当手指一按下的时候回调 * * @param seekBar */ @Override public void onStartTrackingTouch(SeekBar seekBar) { //移除消息 handler.removeMessages(HIDE_MEDIA_CONTROLLER); } /** * 当手指离开的时候回调 * * @param seekBar */ @Override public void onStopTrackingTouch(SeekBar seekBar) { handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); } } private void updateVoiceProgress(int progress) { //第一个参数:声音的类型 //第二个参数:声音的值:0~15 //第三个参数:1,显示系统调声音的;0,不显示 am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); seekbarVoice.setProgress(progress); if (progress <= 0) { //设置静音 isMute = true; } else { isMute = false; } currentVolume = progress; } private void updateVoice(int progress) { if (isMute) { am.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); seekbarVoice.setProgress(0); } else { //第一个参数:声音的类型 //第二个参数:声音的值:0~15 //第三个参数:1,显示系统调声音的;0,不显示 am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); seekbarVoice.setProgress(progress); } currentVolume = progress; } class VideoOnSeekBarChangeListener implements SeekBar.OnSeekBarChangeListener { /** * 状态变化的时候回调 * * @param seekBar * @param progress 当前改变的进度-要拖动到的位置 * @param fromUser 用户导致的改变true,否则false */ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { //响应用户拖动 videoview.seekTo(progress); } } /** * 当手指一按下的时候回调 * * @param seekBar */ @Override public void onStartTrackingTouch(SeekBar seekBar) { //移除消息 handler.removeMessages(HIDE_MEDIA_CONTROLLER); } /** * 当手指离开的时候回调 * * @param seekBar */ @Override public void onStopTrackingTouch(SeekBar seekBar) { handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); } } class MyOnCompletionListener implements MediaPlayer.OnCompletionListener { @Override public void onCompletion(MediaPlayer mp) { //1.单个视频-退出播放器 //2.视频列表-播放下一个 // Toast.makeText(SystemVideoPlayerActivity.this, "视频播放完成", Toast.LENGTH_SHORT).show(); setNextVideo(); } } private void setPreVideo() { //1.判断一下列表 if (mediaItems != null && mediaItems.size() > 0) { position--; if (position >= 0) { //显示加载页面 ll_loading.setVisibility(View.VISIBLE); MediaItem mediaItem = mediaItems.get(position); //设置标题 tvName.setText(mediaItem.getName()); isNetUrl = utils.isNetUrl(mediaItem.getData()); //设置播放地址 videoview.setVideoPath(mediaItem.getData()); //校验按钮状态 checkButtonStatus(); } else { //越界 position = 0; } } } /** * 设置播放下一个 */ private void setNextVideo() { //1.判断一下列表 if (mediaItems != null && mediaItems.size() > 0) { position++; if (position < mediaItems.size()) { MediaItem mediaItem = mediaItems.get(position); //显示加载页面 ll_loading.setVisibility(View.VISIBLE); //设置标题 tvName.setText(mediaItem.getName()); isNetUrl = utils.isNetUrl(mediaItem.getData()); //设置播放地址 videoview.setVideoPath(mediaItem.getData()); //专题的校验 checkButtonStatus(); if (position == mediaItems.size() - 1) { Toast.makeText(this, "哥们播放最后一个视频了哦", Toast.LENGTH_SHORT).show(); } } else { //越界 position = mediaItems.size() - 1; finish(); } } //2. 单个的uri else if (uri != null) { finish(); } } private void checkButtonStatus() { //1.判断一下列表 if (mediaItems != null && mediaItems.size() > 0) { //1.其他设置默认 setButtonEnable(true); //2.播放第0个,上一个i设置灰色 if (position == 0) { btnPre.setBackgroundResource(R.drawable.btn_pre_gray); btnPre.setEnabled(false); } //3.播放最后一个设置,下一个按钮设置灰色 if (position == mediaItems.size() - 1) { btnNext.setBackgroundResource(R.drawable.btn_next_gray); btnNext.setEnabled(false); } } //2. 单个的uri else if (uri != null) { //上一个和下一个都要设置灰色 setButtonEnable(false); } } /*** * 设置按钮的可点状态 * * @param isEnable */ private void setButtonEnable(boolean isEnable) { if (isEnable) { btnPre.setBackgroundResource(R.drawable.btn_pre_selector); btnNext.setBackgroundResource(R.drawable.btn_next_selector); } else { btnPre.setBackgroundResource(R.drawable.btn_pre_gray); btnNext.setBackgroundResource(R.drawable.btn_next_gray); } btnPre.setEnabled(isEnable); btnNext.setEnabled(isEnable); } class MyOnErrorListener implements MediaPlayer.OnErrorListener { @Override public boolean onError(MediaPlayer mp, int what, int extra) { // Toast.makeText(SystemVideoPlayerActivity.this, "播放出错了,亲", Toast.LENGTH_SHORT).show(); //1.播放的视频格式不支持--跳转万能播放器播放 startVitamioVideoPlayer(); //2.播放网络资源视频的时候,断网了==提示-重试(3次) //3.视频内容有缺损 return true; } } /** * 启动万能解码器 */ private void startVitamioVideoPlayer() { if(videoview != null){ videoview.stopPlayback(); } Intent intent = new Intent(this,VitamioVideoPlayerActivity.class); if(mediaItems != null && mediaItems.size() >0){ Bundle bundle = new Bundle(); //列表数据 bundle.putSerializable("videolist",mediaItems); intent.putExtras(bundle); //传递点击的位置 intent.putExtra("position",position); }else if(uri != null){ intent.setDataAndType(uri,"video/*"); } startActivity(intent); finish(); } class MyOnPreparedListener implements MediaPlayer.OnPreparedListener { /** * 当底层加载视频准备完成的时候回调 * * @param mp */ @Override public void onPrepared(MediaPlayer mp) { //得到视频原始的大小 videoWidth = mp.getVideoWidth(); videoHeight = mp.getVideoHeight(); //设置默认大小 setVideoType(VIDEO_TYPE_DEFAULT); //开始播放 videoview.start(); //统计用户的行为-拖动 // mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { // @Override // public void onSeekComplete(MediaPlayer mp) { // Toast.makeText(SystemVideoPlayerActivity.this, "拖动完成了", Toast.LENGTH_SHORT).show(); // } // }); //准备好的时候 //1.视频的总播放时长和SeeKBar关联起来 int duration = videoview.getDuration(); seekbarVideo.setMax(duration); //设置总时长 tvDuration.setText(utils.stringForTime(duration)); //发消息 handler.sendEmptyMessage(PROGRESS); //隐藏加载等待页面 ll_loading.setVisibility(View.GONE); } } private float startY; /** * 滑动的区域 */ private int touchRang = 0; /** * 当按下的时候的音量 */ private int mVol; private float startX; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); detector.onTouchEvent(event);//把事件传递给手势识别器 if (event.getAction() == MotionEvent.ACTION_DOWN) { //1.按下 //按下的时候记录起始坐标,最大的滑动区域(屏幕的高),当前的音量 startY = event.getY(); startX = event.getX(); touchRang = Math.min(screeHeight, screenWidth);//screeHeight mVol = am.getStreamVolume(AudioManager.STREAM_MUSIC); //把消息移除 handler.removeMessages(HIDE_MEDIA_CONTROLLER); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { float endY = event.getY(); float distanceY = startY - endY; if(startX > screenWidth/2){ //屏幕滑动的距离 //滑动屏幕的距离 : 总距离 = 改变的声音 : 总声音 //改变的声音 = (滑动屏幕的距离 / 总距离)*总声音 float delta = (distanceY / touchRang) * maxVolume; // 设置的声音 = 原来记录的 + 改变的声音 int volue = (int) Math.min(Math.max(mVol + delta, 0), maxVolume); //判断 if (delta != 0) { updateVoiceProgress(volue); } // startY = event.getY();//不能添加 }else{ //左边屏幕--改变亮度 final double FLING_MIN_DISTANCE = 0.5; final double FLING_MIN_VELOCITY = 0.5; if (startY- endY > FLING_MIN_DISTANCE && Math.abs(distanceY) > FLING_MIN_VELOCITY) { Log.e(TAG, "up"); setBrightness(20); } if (startY - endY < FLING_MIN_DISTANCE && Math.abs(distanceY) > FLING_MIN_VELOCITY) { Log.e(TAG, "down"); setBrightness(-20); } } } else if (event.getAction() == MotionEvent.ACTION_UP) { handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); } return true; } /* * * 设置屏幕亮度 lp = 0 全暗 ,lp= -1,根据系统设置, lp = 1; 最亮 */ public void setBrightness(float brightness) { WindowManager.LayoutParams lp = getWindow().getAttributes(); // if (lp.screenBrightness <= 0.1) { // return; // } lp.screenBrightness = lp.screenBrightness + brightness / 255.0f; if (lp.screenBrightness > 1) { lp.screenBrightness = 1; vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); long[] pattern = { 10, 200 }; // OFF/ON/OFF/ON... vibrator.vibrate(pattern, -1); } else if (lp.screenBrightness < 0.2) { lp.screenBrightness = (float) 0.2; vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); long[] pattern = { 10, 200 }; // OFF/ON/OFF/ON... vibrator.vibrate(pattern, -1); } Log.e(TAG, "lp.screenBrightness= " + lp.screenBrightness); getWindow().setAttributes(lp); } /** * 得到播放地址 */ private void getData() { //一个地址:从文件发起的单个播放请求 uri = getIntent().getData(); Log.e("TAG", "uri===" + uri); //得到视频列表 mediaItems = (ArrayList<MediaItem>) getIntent().getSerializableExtra("videolist"); position = getIntent().getIntExtra("position", 0); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { //改变音量值 currentVolume--; updateVoiceProgress(currentVolume); //移除消息 handler.removeMessages(HIDE_MEDIA_CONTROLLER); //发消息 handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); return true; } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { currentVolume++; updateVoiceProgress(currentVolume); handler.removeMessages(HIDE_MEDIA_CONTROLLER); handler.sendEmptyMessageDelayed(HIDE_MEDIA_CONTROLLER, 4000); return true; } return super.onKeyDown(keyCode, event); } }