如何检测 Android 中每秒的时间变化?
How to detect change in time each second in Android?
我正在按照 this tutorial 为 android 创建自定义表盘。我实现了广播接收器来及时检测变化,如下所示:
在我的 activity 中,我有静态块来过滤以下意图:
static {
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_TICK);
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
}
我的接收器class:
public class MyReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
c = Calendar.getInstance();
Log.d("myapp", "time changed");
hrs = c.get(Calendar.HOUR_OF_DAY);
min = c.get(Calendar.MINUTE);
sec = c.get(Calendar.SECOND);
txt_hrs.setText(String.valueOf(hrs));
txt_mins.setText(String.valueOf(min));
txt_sec.setText(String.valueOf(sec));
}
}
并且我已经在 oncreate() 中注册了接收器:
MyReciever myReciever = new MyReciever();
registerReceiver(myReciever,intentFilter);
以上代码在几小时和几分钟内都可以正常工作,但在几秒钟内不起作用。
Intent.ACTION_TIME_TICK
的问题是每分钟播放一次,而不是秒。
我需要检测表盘上时钟每秒的时间变化。有人对 'detecting time change per second' 有任何解决方案吗?
你可以看看why you are not getting intent after every seconds。更好的办法是创建一个单独的线程或使用 asynctask,您需要每隔一秒更新一次 textview。
或者您可以使用 Timer
and TimerTask
来达到这样的目的,如下所示
public void updateTimeOnEachSecond() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
c = Calendar.getInstance();
Log.d("myapp", "time changed");
hrs = c.get(Calendar.HOUR_OF_DAY);
min = c.get(Calendar.MINUTE);
sec = c.get(Calendar.SECOND);
runOnUiThread(new Runnable() {
@Override
public void run() {
txt_hrs.setText(String.valueOf(hrs));
txt_mins.setText(String.valueOf(min));
txt_sec.setText(String.valueOf(sec));
}
});
}
}, 0, 1000);
}
并在从 activity 初始化每个视图后调用此方法。
我正在按照 this tutorial 为 android 创建自定义表盘。我实现了广播接收器来及时检测变化,如下所示:
在我的 activity 中,我有静态块来过滤以下意图:
static {
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_TICK);
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
}
我的接收器class:
public class MyReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
c = Calendar.getInstance();
Log.d("myapp", "time changed");
hrs = c.get(Calendar.HOUR_OF_DAY);
min = c.get(Calendar.MINUTE);
sec = c.get(Calendar.SECOND);
txt_hrs.setText(String.valueOf(hrs));
txt_mins.setText(String.valueOf(min));
txt_sec.setText(String.valueOf(sec));
}
}
并且我已经在 oncreate() 中注册了接收器:
MyReciever myReciever = new MyReciever();
registerReceiver(myReciever,intentFilter);
以上代码在几小时和几分钟内都可以正常工作,但在几秒钟内不起作用。
Intent.ACTION_TIME_TICK
的问题是每分钟播放一次,而不是秒。
我需要检测表盘上时钟每秒的时间变化。有人对 'detecting time change per second' 有任何解决方案吗?
你可以看看why you are not getting intent after every seconds。更好的办法是创建一个单独的线程或使用 asynctask,您需要每隔一秒更新一次 textview。
或者您可以使用 Timer
and TimerTask
来达到这样的目的,如下所示
public void updateTimeOnEachSecond() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
c = Calendar.getInstance();
Log.d("myapp", "time changed");
hrs = c.get(Calendar.HOUR_OF_DAY);
min = c.get(Calendar.MINUTE);
sec = c.get(Calendar.SECOND);
runOnUiThread(new Runnable() {
@Override
public void run() {
txt_hrs.setText(String.valueOf(hrs));
txt_mins.setText(String.valueOf(min));
txt_sec.setText(String.valueOf(sec));
}
});
}
}, 0, 1000);
}
并在从 activity 初始化每个视图后调用此方法。