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

这几天在做一个蓝牙设备控制手机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() {

			@Override
			public void onClick(View arg0) {
				changeState();
			}
		});

		videoView
				.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
					// @Override

					public 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() {

			@Override
			public 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方法
	}
	

	@Override
	protected 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值