package net.smc.usbplayer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.smc.usbplayer.bean.TimePlayInfo;
import net.smc.usbplayer.tools.Tools;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.MediaController;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
/**
* 快速播放模式
写一个文本档fastmode.txt
数据如下,数字可以任意更改。
00=0,20
01=20,50
02=50,100
03=100,200
开机的时候,播放机一直在,0到20循环播放,如果按了数控键1,就从上表定义
的,从20秒播放到50秒,如果播放完成,就跳回,00这一段,循环播放。
00定义开机循环播放时间段。
*
*/
@SuppressLint("NewApi")
public class SeamlessHandoverActivity2 extends Activity{
private static final String TAG = SeamlessHandoverActivity2.class.getSimpleName();
private static final int PLAY_START_TIME = 0x001;
private MVideoView videoPlayer;
private String videoPath;
private TimePlayInfo cusTimePlayInfo;
private ArrayList<TimePlayInfo> timePlayList=new ArrayList<TimePlayInfo>();
private UsbStateReceiver usbReceiver;
private String videoName;
private Handler mHandler=new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case PLAY_START_TIME:
if(cusTimePlayInfo!=null){
Log.i(TAG, "videoPlayer seekTo-->"+cusTimePlayInfo.toString());
videoPlayer.seekTo(cusTimePlayInfo.getStartTime());
int delayTime=cusTimePlayInfo.getEndTime()-cusTimePlayInfo.getStartTime();
Log.i(TAG, "delayTime-->"+delayTime);
mHandler.removeMessages(PLAY_START_TIME);
mHandler.sendEmptyMessageDelayed(PLAY_START_TIME,delayTime);
}
break;
case UsbStateReceiver.USB_STATE_ON:
break;
case UsbStateReceiver.USB_STATE_OFF:
finish();
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video);
Log.i(TAG, "onCreate...");
init();
}
private void init() {
Log.i(TAG, "init...");
videoPlayer = (MVideoView) findViewById(R.id.videoView);
MediaController mediaController = new MediaController(this);
mediaController.setMediaPlayer(videoPlayer);
videoPlayer.setMediaController(mediaController);
usbReceiver = new UsbStateReceiver(this, mHandler);
usbReceiver.registerReceiver();
Intent intent = getIntent();
String usbPath = intent.getStringExtra(SecondActivity.USB_PATH);
Log.i(TAG, "usbPath-->"+usbPath);
if(!TextUtils.isEmpty(usbPath)){
paseFile(usbPath+"/fastmode.txt");
videoPath=usbPath+"/"+videoName;
}
//先检查存贮设备,如果USB/外置SD卡和内置SD卡同时存在,播放U盘,只有内置SD卡则播放它
List<String> drivers = Tools.getUsbDrivers(this);
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume...");
if(!TextUtils.isEmpty(videoPath)){
Log.i(TAG, "videoPlayer setVideoPath...");
videoPlayer.setVideoPath(videoPath);
videoPlayer.start();
if(timePlayList.size()>0){
cusTimePlayInfo=timePlayList.get(0);
Log.i(TAG, "cusTimePlayInfo-->"+cusTimePlayInfo);
int delayTime=cusTimePlayInfo.getEndTime()-cusTimePlayInfo.getStartTime();
Log.i(TAG, "delayTime-->"+delayTime);
mHandler.removeMessages(PLAY_START_TIME);
mHandler.sendEmptyMessageDelayed(PLAY_START_TIME,delayTime);
}
}
}
@Override
protected void onStop() {
super.onStop();
timePlayList.clear();
timePlayList=null;
videoPlayer.stopPlayback();
usbReceiver.unRegisterReceiver();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
private void paseFile(String filePath) {
boolean exists = new File(filePath).exists();
Log.i(TAG, "paseFile filePath exists-->"+exists);
if(!exists){
Log.e(TAG, "paseFile no filePath -->"+filePath);
return;
}
timePlayList.clear();
String lineData;
try {
BufferedReader br = new BufferedReader(new FileReader(filePath));
while ((lineData = br.readLine()) != null) {
lineData = lineData.trim();
Log.i(TAG, lineData);
String[] arr = lineData.split("=");
if(arr!=null&&arr.length>1){
if(arr[0].equals("n")){
videoName=arr[1].trim();
}else{
TimePlayInfo info = new TimePlayInfo();
info.setKeyCode(Integer.parseInt(arr[0].trim()));
String[] arr2=arr[1].split(",");
if(arr2!=null&&arr2.length>1){
info.setStartTime(Integer.parseInt(arr2[0].trim())*1000);
info.setEndTime(Integer.parseInt(arr2[1].trim())*1000);
timePlayList.add(info);
}
}
}
}
for (int i=0;i<timePlayList.size();i++) {
Log.d(TAG, "timePlayInfo -->"+timePlayList.get(i).toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(TAG, "keyCode-->"+keyCode);
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
for (int i=0;i<timePlayList.size();i++) {
TimePlayInfo timePlayInfo = timePlayList.get(i);
Log.d(TAG, "timePlayInfo -->"+timePlayInfo.toString());
if(timePlayInfo.getKeyCode()==keyCode-7){
Log.i(TAG, "=====================");
Log.d(TAG, "timePlayInfo -->"+timePlayInfo.toString());
videoPlayer.seekTo(timePlayInfo.getStartTime());
int delayTime=timePlayInfo.getEndTime()-timePlayInfo.getStartTime();
Log.d(TAG, "delayTime-->"+delayTime);
mHandler.removeMessages(PLAY_START_TIME);
mHandler.sendEmptyMessageDelayed(PLAY_START_TIME,delayTime);
Log.i(TAG, "=====================");
return true;
}
}
}
return super.onKeyDown(keyCode, event);
}
}
package net.smc.usbplayer.bean;
public class TimePlayInfo {
private int keyCode;
private int startTime;
private int endTime;
public int getKeyCode() {
return keyCode;
}
public void setKeyCode(int keyCode) {
this.keyCode = keyCode;
}
public int getStartTime() {
return startTime;
}
public void setStartTime(int startTime) {
this.startTime = startTime;
}
public int getEndTime() {
return endTime;
}
public void setEndTime(int endTime) {
this.endTime = endTime;
}
@Override
public String toString() {
return "TimePlayInfo [keyCode=" + keyCode + ", startTime=" + startTime
+ ", endTime=" + endTime + "]";
}
}
n=xiaomi.mp4
00=0,20
01=30,50
02=60,80
video.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
tools:context=".MainActivity" >
<net.smc.usbplayer.MVideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>