1

我正在按照本教程为 android 创建一个自定义表盘。我已经实现了广播接收器来检测时间变化,如下所示:

在我的活动中,我有静态块来过滤以下意图:

static {
    intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
    intentFilter.addAction(Intent.ACTION_TIME_TICK);
    intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
 }

我的接收器类:

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在于它每分钟播放一次,而不是每秒播放一次。

我需要检测表盘上时钟每秒的时间变化。有人有“检测每秒时间变化”的解决方案吗?

4

1 回答 1

3

您可能会看到为什么您每秒钟都没有意图。所以更好的是创建一个单独的线程或使用 asynctask ,您需要每秒钟更新一次文本视图。


或者您可以使用TimerandTimerTask用于此目的,如下所示

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);

}

并在从活动中初始化每个视图后调用此方法。

于 2015-03-04T06:27:29.387 回答