Kru*_*hah 3 android android-intent android-broadcast watch-face-api wear-os
我正在按照本教程为 Android 创建自定义表盘。我已经实现了广播接收器来检测时间变化,如下所示:
在我的活动中,我有静态块来过滤以下意图:
static {
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_TICK);
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
}
Run Code Online (Sandbox Code Playgroud)
我的接收者类别:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在 oncreate() 中注册了接收器:
MyReciever myReciever = new MyReciever();
registerReceiver(myReciever,intentFilter);
Run Code Online (Sandbox Code Playgroud)
上面的代码在几小时和几分钟内工作正常,但在几秒钟内不起作用。
问题Intent.ACTION_TIME_TICK
是它每分钟广播一次,而不是每秒一次。
我需要检测表盘上时钟每秒的时间变化。有人有“检测每秒时间变化”的解决方案吗?
你可能会想为什么你在每一秒之后都没有集中注意力。因此,更好的方法是创建一个单独的线程或使用异步任务,您需要每秒更新一次文本视图。
或者您可以使用Timer
andTimerTask
来达到此目的,如下所示
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);
}
Run Code Online (Sandbox Code Playgroud)
并在初始化活动的每个视图后调用此方法。
归档时间: |
|
查看次数: |
2729 次 |
最近记录: |