您的位置:首页 > 移动开发 > Android开发

Android 视频播放状态链控制简单实现

2014-06-11 18:14 561 查看
需求场景:连续进行视频播放2个小时,无任何按键响应

1、提示用户已观看多长时间,是否需要休息,用户可点击休息一会或继续观看,

2、如果用户没有任何反应一段时间以后自动退出应用

3、如果用户点击休息一会,间隔一段时间后自动进行播放

4、如果用户点击继续观看,则重置播放状态,重新计时

针对以上的效果做了简单的实现,如下:



主要代码:

public class ActionManager {

	public enum State {
		Default, Playing, hasPromptRest, Rest
	}

	private static int stateTime = 0; // 某一状态的持续时间
	private static int playPeriod = 2 * 3600; // 多长时间后提示休息
	private static int hasPromptPeriod = 2 * 60; // 提示休息后,多长时间内没反应
	private static int restPeriod = 10 * 60; // 再次提示休息的间隔
	private static State ActionState = State.Default;
	private static boolean hasPause = false;

	private static Context context;

	public static void setContext(Context c) {
		context = c;
	}

	public static Context getContext() {
		return context;
	}

	public static void setTest() {
		playPeriod = 30;
		hasPromptPeriod = 30;
		restPeriod = 30;
	}

	private static int getActionTime() {
		return stateTime;
	}

	public static void setActionTime(int actionTime) {
		if (getActionState() == State.Default) {
			resetActionTime();
			return;
		}
		if (hasPause)
			return;
		stateTime += actionTime;
	}

	private static State getActionState() {
		return ActionState;
	}

	public static void setState(State actionState) {
		ActionState = actionState;
	}

	public static void setActionState(State actionState) {
		resetActionTime();
		ActionState = actionState;
	}

	public static void setHasPause(boolean p) {
		hasPause = p;
	}

	private static void resetActionTime() {
		stateTime = 0;
	}

	private static IAction getAction(Object data) {
		IAction action = new NullAction();
		int actionTime = getActionTime();
		switch (getActionState()) {
			case Playing :
				if (actionTime >= playPeriod)
					action = new PlayingAction();
				break;
			case hasPromptRest :
				if (actionTime >= hasPromptPeriod)
					action = new HasPromptRestAction();
				break;
			case Rest :
				if (actionTime >= restPeriod)
					action = new RestAction();
				break;
			default :
				break;
		}
		return action;
	}

	/**
	 * execute user monitor action
	 */
	public static void doAction(Object data, int timeInterval) {
		setActionTime(timeInterval);
		IAction action = getAction(data);
		action.doAction(data);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐