Andorid歌词秀设计思路SafetyTimer
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Andorid歌词秀设计思路SafetyTimer相关的知识,希望对你有一定的参考价值。
在android中实现多媒体播放功能主要是通过MediaPlayer实现的。为了方便用户检测MediaPlayer的动作状态,Andorid为我们提供了一下接口
Nested Classes | |||||||||||
interface | MediaPlayer.OnBufferingUpdateListener | Interface definition of a callback to be invoked indicating buffering status of a media resource being streamed over the network. | |||||||||
interface | MediaPlayer.OnCompletionListener | Interface definition for a callback to be invoked when playback of a media source has completed. | |||||||||
interface | MediaPlayer.OnErrorListener | Interface definition of a callback to be invoked when there has been an error during an asynchronous operation (other errors will throw exceptions at method call time). | |||||||||
interface | MediaPlayer.OnInfoListener | Interface definition of a callback to be invoked to communicate some info and/or warning about the media or its playback. | |||||||||
interface | MediaPlayer.OnPreparedListener | Interface definition for a callback to be invoked when the media source is ready for playback. | |||||||||
interface | MediaPlayer.OnSeekCompleteListener | Interface definition of a callback to be invoked indicating the completion of a seek operation. | |||||||||
interface | MediaPlayer.OnVideoSizeChangedListener | Interface definition of a callback to be invoked when the video size is first known or updated |
通过这些接口可以检测
1.流媒体缓冲的状态
2.播放结束
4.信息交换(不好意思,是什么信息没有确认过。)
5.媒体准备好
6.定位结束
7.视频尺寸变化
但是无论谁做播放器都想知道的现在的播放位置却没有监测手段。为了解决这个问题,有一个很自然得想法就是做一个定时器。
关于Android定时器的使用,网上有很多例子。一般来讲是这样的。
- public class TestTimerextends
- new
- new
- public void
- switch
- case 1:
- setTitle("hear me?"); //这里才是要做的事情。
- break;
- super.handleMessage(msg);
- ;
- new
- public void
- new
- 1;
- handler.sendMessage(message);
- ;
- public void
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- timer.schedule(task,10000); //启动定时器
- 看起来挺累的吧,但是又不得不看。有没有办法把这件事弄的漂亮一点呢,有。
首先,我们想要什么呢。比如下面这样 - public class TestTimerextends
- Timer t = new Timer(10000, new OnTimeListener()
- public void OnTimer()
- setTitle("hear me?"); //要做的事情。
- );
- public void
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- timer.start(); //启动定时器
- 是不是好多了。这样的代码在Android里到处都是,关键是我们自己做的代码会不会做成这样的。
总结一下,其实我们想要的是:
直说了吧,这就是Observer的简化版。不难吧,但是实际工作中会这么做的恐怕还真就不多。
其实这看似不大的一步,会从根本上改变我们的程序结构的。
下面是实际的代码,供参考。也可以到以下地址下载:javascript:void(0)
package LyricPlayer.xwg;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class SafetyTimer
Timer mTimer = null;
Handler mHandler = null;
TimerTask mTask = null;
OnTimeListener mListener = null;
long mInterval = 0; //in milliseconds
boolean mRepeate = false; //是否为重复Timer,指定为false时只动作一次(未经测试)
private static final String TAG = new String("SafetyTimer");
//Observer接口定义
public interface OnTimeListener
public void OnTimer();
//创建定时器并指定Observer
public SafetyTimer(long interval, OnTimeListener listener)
mInterval = interval;
mListener = listener;
//启动定时器
public void startTimer(boolean repeate)
mHandler = new Handler()
public void handleMessage(Message msg)
if(mListener != null)
mListener.OnTimer();
Log.i(TAG, "mListener.OnTimer()");
super.handleMessage(msg);
;
mTask = new TimerTask()
public void run()
Message message = new Message();
message.what = 0; //anything is ok.
mHandler.sendMessage(message);
;
mTimer = new Timer();
if(repeate)
mTimer.schedule(mTask, 0, mInterval);
else
mTimer.schedule(mTask, mInterval);
mRepeate = repeate;
Log.i(TAG, "startTimer(" + repeate + ")");
//停止Timer动作
//释放获得的资源。
public void stopTimer()
mTimer.cancel();
mTimer.purge();
mTimer = null;
mHandler = null;
mTask = null;
Log.i(TAG, "stopTimer()");
//Timer是否处于工作状态。
public boolean isRunging()
return (mTimer != null);
以上是关于Andorid歌词秀设计思路SafetyTimer的主要内容,如果未能解决你的问题,请参考以下文章