关于android 指定视频播放某段时间

来源:互联网 发布:linux脚本如何运行 编辑:程序博客网 时间:2024/05/10 07:00

这几天在做一个蓝牙设备控制手机app里面的视频人体模型动,想的是用蓝牙传过来的数据然后去指定视频要播放哪一个时间点,于是就搜了一点关于怎么控制播放视频的某一时间端(的视频)当然这个方案可能最后不会用,但是这个知识点还是有必要记录的。

先看一下加载视频并控制的类的相关代码(代码可能有点乱)

package com.example.getbitmap;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.bluetooth.BluetoothDevice;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.graphics.drawable.Drawable;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.Toast;import android.widget.VideoView;import com.example.bluetoothUtil.BluetoothClientService;import com.example.bluetoothUtil.BluetoothTools;import com.example.bluetoothUtil.TransmitBean;/** *  */public class ActionVideoStartActivity extends Activity {private ImageView changeState;//改变视频播放还是暂停状态切换private VideoView videoView;private View layout;private SeekBar skb_audio;//一个进度条,此处用不到private Timer mTimer;private TimerTask mTimerTask;private int CurrentPosition;// 当前播放时间private List<BluetoothDevice> deviceList = new ArrayList<BluetoothDevice>();HashMap<Object, Object> map = new HashMap<Object, Object>();//一个标记里面存放的是,该activity要加载的xml文件和要加载的视频public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 根据集合得到要加载的XML文件setContentView(((View) chooseXmlAndSourceFile().get("xmlName")));// 通过findViewById找到资源changeState = (ImageView) layout.findViewById(R.id.changeState);// 获取界面上VideoView组件videoView = (VideoView) layout.findViewById(R.id.ble_surfaceview);// 根据集合得到要加载的视频文件LoadingVideo(((Integer) chooseXmlAndSourceFile().get("SourceFile")),2777, 4000);// 增加播放音乐按钮的事件changeState.setOnClickListener(new ImageView.OnClickListener() {@Overridepublic void onClick(View arg0) {changeState();}});videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {// @Overridepublic void onCompletion(MediaPlayer arg0) {try {videoView.start();} catch (Exception e) {e.printStackTrace();}}});// videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {// @Override// public boolean onError(MediaPlayer arg0, int arg1, int arg2) {// try {//// videoView.start();// } catch (Exception e) {// e.printStackTrace();// }// return false;// }// });//开始搜索Intent startSearchIntent = new Intent(BluetoothTools.ACTION_START_DISCOVERY);sendBroadcast(startSearchIntent);}// 切换动画的状态private boolean isStart = false;public void changeState() {if (isStart) {isStart = false;Drawable play_green_button = ((Context) (ActionVideoStartActivity.this)).getResources().getDrawable(R.drawable.pause_green_button);changeState.setImageDrawable(play_green_button);// mGLSurfaceView.control(true);videoView.start();} else {isStart = true;Drawable pause_green_button = ((Context) (ActionVideoStartActivity.this)).getResources().getDrawable(R.drawable.play_green_button);changeState.setImageDrawable(pause_green_button);// mGLSurfaceView.control(false);videoView.pause();}}// ----------定时器记录播放进度---------///** 加载视频 参数是播放的视频文件,开始时间,结束时间 */public void LoadingVideo(int SourceFile, int startTime, final int endTime) {String uri = "android.resource://" + getPackageName() + "/"+ SourceFile;videoView.setVideoURI(Uri.parse(uri)); videoView.seekTo(startTime);// 视频一开始就调到要指定的时间点处(毫秒)videoView.start();// 然后开始播放// int CurrentPosition = videoView.getCurrentPosition();//得到当前播放的视频时间点// 声明一个时间计时器mTimer = new Timer();mTimerTask = new TimerTask() {@Overridepublic void run() {if (videoView.isPlaying()) {CurrentPosition = videoView.getCurrentPosition();//当视频播放的时间点和指定结束点相同时暂停视频if (CurrentPosition == endTime) {videoView.pause();}}}};/** * schedule的意思(时间表、进度表)参数的意思是() * 第一个参数"new MyTask(event.getServletContext())": 是 TimerTask 类,在包:import * java.util.TimerTask .使用者要继承该类,并实现 public void run() 方法,因为 TimerTask * 类实现了 Runnable 接口。 *  * 第二个参数"0"的意思是:(0就表示无延迟) 当你调用该方法后,该方法必然会调用 TimerTask 类 TimerTask 类 中的 * run() 方法,这个参数就是这两者之间的差值,转换成汉语的意思就是说,用户调用 schedule() * 方法后,要等待这么长的时间才可以第一次执行 run() 方法。 *  * 第三个参数"60*60*1000"的意思就是: (单位是毫秒60*60*1000为一小时) (单位是毫秒3*60*1000为三分钟) * 第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法 *  *  * */mTimer.schedule(mTimerTask, 0, 10);//每10毫秒执行一次run方法}@Overrideprotected void onResume() {super.onResume();Drawable play_green_button = ((Context) (ActionVideoStartActivity.this)).getResources().getDrawable(R.drawable.play_green_button);changeState.setImageDrawable(play_green_button);isStart = true;}/** 根据跳转传来的值进行判断要加载的XML文件以及视频文件 */public HashMap<Object, Object> chooseXmlAndSourceFile() {//这个地方是前面那个activity传过来的一个值,自己可以去掉直接选择要调用哪个xml文件Intent intent = getIntent();String actionName = intent.getStringExtra("actionName");if (actionName.equals("cbct")) {// 床边垂腿LayoutInflater inflater = (LayoutInflater) ActionVideoStartActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE);layout = inflater.inflate(R.layout.activity_cbct, null);map.put("xmlName", layout);map.put("SourceFile", R.raw.cbct);}return map;}}

0 0