Android Chronometer以定义值开始

Nun*_*ves 3 android chronometer

我有一个应用程序,我正在向用户显示他正在做的事情的计时器.每当活动进入后台(通过主页按钮或返回)时,我保存该时间(以秒为单位),当活动恢复时,我想继续从同一时间运行计时器.用户可能会从列表中选择一个不同的项目,时间也不同,他也可能会关闭手机...我可以节省计时器的时间,但我不能用开始时间设置它.

Chornometer API,该方法setBase()指出:

设置计数定时器参考的时间.

根据我的理解,这意味着如果我将此值设置为currentTime,它将从0开始计数.现在,如果我希望它以17s开始,我想将基数设置为currentTime减去17秒前的时间.所以类似于:

setBase(system.currentTimeMillis() - (17 * 1000)).
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,它始终以0开始!

我在这里阅读了一些其他的主题,但没有一个答案有帮助.它始终以0开头!

提前致谢.

Mar*_*mic 8

我想你将不得不自己跟踪一些时间标记.

Chronometer myChrono;
long baseTime;
long stopTime;
long elapsedTime;
Run Code Online (Sandbox Code Playgroud)

设置基准时间时,您要使用:

baseTime = SystemClock.elapsedRealtime() - stopTime;
myChrono.setBase(baseTime);
Run Code Online (Sandbox Code Playgroud)

如果您想查看已经过了多少时间,请使用:

elapsedTime = SystemClock.elapsedRealtime() - myChrono.getBase();
Run Code Online (Sandbox Code Playgroud)

看一下SystemClock doc.


小智 6

setBase(system.currentTimeMillis() - (17 * 1000))
Run Code Online (Sandbox Code Playgroud)

应该改为

setBase(SystemClock.elapsedRealtime() - (17 * 1000))
Run Code Online (Sandbox Code Playgroud)

一般来说:

mChronometer.setBase(SystemClock.elapsedRealtime() - (nr_of_min*60000 + nr_of_sec*1000)))

希望这会节省很多人的时间:)