如何在Android中每秒检测时间变化?

3
我正在按照这个教程创建一个定制的Android手表表盘。我已经实现了广播接收器来检测时间变化,代码如下:
在我的Activity中,我有一个静态块来过滤以下意图:
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的问题在于它每分钟广播一次,而不是每秒。

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

1个回答

6
你可以查看每秒钟为什么不能获取意图。因此最好创建一个单独的线程或使用asynctask,在其中每秒更新一次你的textview。
你可以使用TimerTimerTask来实现此目的,如下所示。
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);

}

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

1
它可以工作,但你的代码需要做一个小改变。你应该把setText方法放在runOnUiThread里面,否则它会抛出CalledFromWrongThreadException异常:只有创建视图层次结构的原始线程才能触摸其视图。我已经编辑了代码,请批准这个修改。 - Krupal Shah
@Krupal 嘿,谢谢你提醒我。是的,我错过了那个。 :) 继续努力……保持更新。 - Pankaj Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接