Android: Chronometer als persistente Stoppuhr. Wie stelle ich die Startzeit ein? Was ist Chronometer "Base"?

7

Ich habe einen Dienst im Hintergrund ausgeführt. Wann immer es startet, speichere ich die Startzeit in Millisekunden:

%Vor%

Ich möchte einen Chronometer anzeigen, der mit dem Zählen beginnt, wenn der Dienst gestartet wird, und niemals stoppt, bis der Benutzer einen Knopf drückt. Ich möchte dem Benutzer erlauben, die Aktivität zu verlassen, indem er den Chronometer rendert, einige Sachen macht und dann zurückkehrt. Aber die Idee ist, dass, wenn der Benutzer zurückkommt, ich nicht möchte, dass der Chronometer wieder auf 0:00 geht. Ich möchte, dass die genaue Zeit angezeigt wird, die seit dem Beginn des Dienstes verstrichen ist.

Ich kann die verstrichene Zeit jedes Mal berechnen, wenn der Benutzer zur Chronometer-Aktivität zurückkehrt:

%Vor%

Die Sache ist, dass ich nicht weiß, wie man dem Chronometer sagt, um von dieser Zeit zu beginnen zu zählen!

Die Einstellung als Chronometerbasis funktioniert nicht. Kann jemand erklären, was genau "Basis" bedeutet oder wie man das erreicht?

vielen Dank! BYE

    
Santiago 24.02.2010, 08:56
quelle

7 Antworten

21

Sie können Chronometer verwenden.

Sie sollten auch diesen Thread überprüfen.

EDIT: Die Lösung:

%Vor%     
Macarse 25.02.2010, 11:25
quelle
4

Die Basiszeit ist die Zeit, zu der der Chronometer gestartet hat. Sie können es mit Chronometer.setBase() einstellen. Sie sollten die Basiszeit mit SystemClock.getElapsedTime() ermitteln. Rufen Sie bei jedem Start von setBase() Chronometer mit der Startzeit auf. Wenn es möglich ist, dass Activity zerstört und neu erstellt wird, während der Timer noch aktiv ist, müssen Sie die Basiszeit irgendwo außerhalb des Activity halten, dem Chronometer gehört.

    
Graeme Duncan 26.02.2010 14:29
quelle
2

Um den Chronometer zu starten, sollten Sie die Methode setBase() Ihres Chronometers mit SystemClock.elapsedRealTime() verwenden. Einfach so:

%Vor%

Wenn Sie jedoch zu einem anderen Zeitpunkt starten möchten, müssen Sie die gewünschte Zeit in Millisekunden subtrahieren. Zum Beispiel möchten Sie Ihren Chronometer nach 10 Sekunden starten:

%Vor%

Nach 2 Minuten:

%Vor%

Aber das Problem hier ist, dass der Chronometer "00:00" Zeit zeigt, bevor es zu zählen beginnt, um es zu Ihrer Zeit zu ändern, müssen Sie das tun:

%Vor%     
Elcresan 03.04.2014 12:38
quelle
1

Einige seltsame mit SystemClock.getElapsedTime (), ich habe einige Änderungen für die normale Verwendung mit Startdatum, wie

%Vor%

Hier Kind von Chronometer unten, TimeView

%Vor%

Einfach kopieren und verwenden, es funktioniert für mich

    
Serhii Bohutskyi 26.09.2013 22:22
quelle
1

Wenn Sie die Basiszeit mit .setBase (SystemClock.elapsedRealTime ()) einstellen, beginnt der Chronometer von 00.00 zu zählen, aber die Zeit, die er gespeichert wird, ist die Menge an Millisekunden vom Start. Wenn Sie .stop verwenden, stoppt die interne Zählung nicht, nur die Zeit, die Sie auf der Uhr sehen. Wenn Sie also .start erneut verwenden, springt die Taktzahl auf die tatsächliche Anzahl. Wenn Sie die Zeit, die von Anfang an vergangen ist, speichern möchten, müssen Sie erneut die abgelaufene Systemzeit abrufen und den Unterschied mit der .setTime

machen     
Caresth 15.11.2014 21:49
quelle
1
  

Wie stelle ich die Startzeit ein? Was ist Chronometer "Base"?

Verwenden Sie SystemClock.elapsedRealtime() für diesen Zweck:

%Vor%     
Jorgesys 29.03.2017 19:29
quelle
0

Das funktioniert für mich:

%Vor%     
faizal 25.09.2014 04:32
quelle

Tags und Links