这是我使用android原生DigitalClock.java和AnalogClock.Java类中使用的方法开发的一个简单时钟。这个时钟支持每秒或每分钟触发的事件,所以你可以使用这些事件并运行您的代码。
- StartTickPerSecond() 方法使用 DigitalClock.java 中使用的方法来获取每秒滴答声。
- StartTickPerMinute() 方法使用 AnalogClock.java 中使用的方法来获取每分钟的滴答声
这仍然可能需要一些修改..但希望这将是你开始的东西..
Clock.java
package com.sample.data;
import java.util.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.SystemClock;
import android.text.format.Time;
public class Clock
{
public static final int TICKPERSECOND=0;
public static final int TICKPERMINUTE=1;
private Time Time;
private TimeZone TimeZone;
private Handler Handler;
private List<OnClockTickListner> OnClockTickListenerList = new ArrayList<OnClockTickListner>();
private Runnable Ticker;
private BroadcastReceiver IntentReceiver;
private IntentFilter IntentFilter;
private int TickMethod=0;
Context Context;
public Clock(Context context)
{
this(context, Clock.TICKPERMINUTE);
}
public Clock(Context context,int tickMethod)
{
this.Context=context;
this.TickMethod=tickMethod;
this.Time=new Time();
this.Time.setToNow();
switch (TickMethod)
{
case 0:
this.StartTickPerSecond();
break;
case 1:
this.StartTickPerMinute();
break;
default:
break;
}
}
private void Tick(long tickInMillis)
{
Clock.this.Time.set(Clock.this.Time.toMillis(true)+tickInMillis);
this.NotifyOnTickListners();
}
private void NotifyOnTickListners()
{
switch (TickMethod)
{
case 0:
for(OnClockTickListner listner:OnClockTickListenerList)
{
listner.OnSecondTick(Time);
}
break;
case 1:
for(OnClockTickListner listner:OnClockTickListenerList)
{
listner.OnMinuteTick(Time);
}
break;
}
}
private void StartTickPerSecond()
{
this.Handler=new Handler();
this.Ticker = new Runnable()
{
public void run()
{
Tick(1000);
long now = SystemClock.uptimeMillis();
long next = now + (1000 - now % 1000);
Handler.postAtTime(Ticker, next);
}
};
this.Ticker.run();
}
private void StartTickPerMinute()
{
this.IntentReceiver= new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Tick(60000);
}
};
this.IntentFilter = new IntentFilter();
this.IntentFilter.addAction(Intent.ACTION_TIME_TICK);
this.Context.registerReceiver(this.IntentReceiver, this.IntentFilter, null, this.Handler);
}
public void StopTick()
{
if(this.IntentReceiver!=null)
{
this.Context.unregisterReceiver(this.IntentReceiver);
}
if(this.Handler!=null)
{
this.Handler.removeCallbacks(this.Ticker);
}
}
public Time GetCurrentTime()
{
return this.Time;
}
public void AddClockTickListner(OnClockTickListner listner)
{
this.OnClockTickListenerList.add(listner);
}
}
OnClockTickListner.java
public interface OnClockTickListner {
public void OnSecondTick(Time currentTime);
public void OnMinuteTick(Time currentTime);
}
如何使用
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.clock_list_item);
Clock c=new Clock(this);
c.AddClockTickListner(new OnClockTickListner() {
@Override
public void OnSecondTick(Time currentTime) {
Log.d("Tick Test per Second",DateFormat.format("h:mm:ss aa ", currentTime.toMillis(true)).toString());
}
@Override
public void OnMinuteTick(Time currentTime) {
Log.d("Tick Test per Minute",DateFormat.format("h:mm aa", currentTime.toMillis(true)).toString());
}
});
}
}