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

如何在Android中检测每秒的时间变化?,android,android-intent,wear-os,android-broadcast,watch-face-api,Android,Android Intent,Wear Os,Android Broadcast,Watch Face Api,我正在通过以下方式为android创建一个定制的手表面板。我已实现广播接收器,以检测时间变化,如下所示: 在我的活动中,我有静态块来过滤以下意图: static { intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_TIME_CHANGED); intentFilter.addAction(Intent.ACTION_TIME_TICK); intentFilter.ad

我正在通过以下方式为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()中注册了receiver:

上面的代码可以在数小时和数分钟内正常工作,但在数秒钟内无法正常工作

Intent.ACTION\u TIME\u TICK的问题在于它是每分钟而不是每秒钟广播的

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

你可以看看。所以最好是创建一个单独的线程或使用asynctask,在这里您需要每秒钟更新一次textview


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

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


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

它可以工作,但代码中有一个小改动。您应该将setText方法放在runOnUiThread中,否则它将抛出CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。我已经编辑了代码。请批准该编辑。@Krupal嘿,谢谢。是的,我错过了坚持下去。。。做更新
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);