Hacer que la aplicación cuente el tiempo desde la primera vez que se usó

2020-02-15 java android time elapsedtime

¿Cómo hacer que una aplicación cuente el tiempo desde la primera vez que se abrió? No tengo idea de qué clase usar. ¿Es posible lograr esto con un cronómetro o algo similar? ¿Alguien puede compartir algún código? No sé qué buscar en Internet, solo tengo una idea de lo que quiero construir. ¿O solo dime una idea con lo que puedo lograr y cómo?

 statisticLayout.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          if (plusiliminus==0){
              Toast.makeText(getActivity(),R.string.toaststatistic,Toast.LENGTH_SHORT).show();
          } else {
              Fragment fragmentstatistic=new Statistic();
              FragmentTransaction transaction=getActivity().getSupportFragmentManager().beginTransaction();
              transaction.replace(R.id.frameLayout,fragmentstatistic).commit();
          }
      }
  });

Answers

Básicamente tienes que hacer dos cosas.

Obtenga la hora actual cuando inicia la aplicación, o presione un botón usando algo como

Date currentTime = Calendar.getInstance().getTime();

Este es un buen comienzo, obtienes el tiempo, luego debes analizar este tiempo en un formato que quieras mostrar al usuario y luego administras un botón de detención y reinicio como se muestra, por ejemplo, en este tutorial

Por lo tanto, crea un TextView y muestra en tiempo real los segundos, analizados de la manera que necesita

import android.os.Handler;  
import android.os.SystemClock;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  
import android.widget.TextView;  

public class MainActivity extends AppCompatActivity {  

    TextView timer ;  
    Button start, pause, reset;  
    long MillisecondTime, StartTime, TimeBuff, UpdateTime = 0L ;  
    Handler handler;  
    int Seconds, Minutes, MilliSeconds ;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  

        timer = (TextView)findViewById(R.id.tvTimer);  
        start = (Button)findViewById(R.id.btStart);  
        pause = (Button)findViewById(R.id.btPause);  
        reset = (Button)findViewById(R.id.btReset);  

        handler = new Handler() ;  

        start.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  

                StartTime = SystemClock.uptimeMillis();  
                handler.postDelayed(runnable, 0);  

                reset.setEnabled(false);  

            }  
        });  

        pause.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  

                TimeBuff += MillisecondTime;  

                handler.removeCallbacks(runnable);  

                reset.setEnabled(true);  

            }  
        });  

        reset.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  

                MillisecondTime = 0L ;  
                StartTime = 0L ;  
                TimeBuff = 0L ;  
                UpdateTime = 0L ;  
                Seconds = 0 ;  
                Minutes = 0 ;  
                MilliSeconds = 0 ;  

                timer.setText("00:00:00");  

            }  
        });  

    }  

    public Runnable runnable = new Runnable() {  

        public void run() {  

            MillisecondTime = SystemClock.uptimeMillis() - StartTime;  

            UpdateTime = TimeBuff + MillisecondTime;  

            Seconds = (int) (UpdateTime / 1000);  

            Minutes = Seconds / 60;  

            Seconds = Seconds % 60;  

            MilliSeconds = (int) (UpdateTime % 1000);  

            timer.setText("" + Minutes + ":"  
                    + String.format("%02d", Seconds) + ":"  
                    + String.format("%03d", MilliSeconds));  

            handler.postDelayed(this, 0);  
        }  

    };  

}  

y la vista de activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>  
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        xmlns:app="http://schemas.android.com/apk/res-auto"  
        xmlns:tools="http://schemas.android.com/tools"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:background="@color/colorPrimary"  
        tools:context="in.amitsin6h.stopwatch.MainActivity">  



            <RelativeLayout  
                android:layout_width="fill_parent"  
                android:layout_height="fill_parent"  
                android:layout_marginLeft="10dp"  
                android:layout_marginRight="10dp"  
                android:paddingBottom="90dp">  


               <TextView  
                   android:text="00:00:00"  
                   android:layout_width="wrap_content"  
                   android:layout_height="wrap_content"  
                   android:id="@+id/tvTimer"  
                   android:textSize="50dp"  
                   android:textStyle="bold"  
                   android:textColor="#ffffff"  
                   android:layout_marginTop="120dp"  
                   android:paddingBottom="50dp"  
                   android:layout_alignParentTop="true"  
                   android:layout_centerHorizontal="true" />  

               <Button  
                   android:text="Start"  
                   android:background="#ffffff"  
                   android:layout_width="wrap_content"  
                   android:layout_height="wrap_content"  
                   android:layout_below="@+id/tvTimer"  
                   android:layout_alignParentLeft="true"  
                   android:layout_alignParentStart="true"  
                   android:layout_marginTop="41dp"  
                   android:id="@+id/btStart" />  

               <Button  
                   android:text="Pause"  
                   android:background="#ffffff"  
                   android:layout_width="wrap_content"  
                   android:layout_height="wrap_content"  
                   android:id="@+id/btPause"  
                   android:layout_alignBaseline="@+id/btStart"  
                   android:layout_alignBottom="@+id/btStart"  
                   android:layout_centerHorizontal="true" />  

               <Button  
                   android:text="Reset"  
                   android:background="#ffffff"  
                   android:layout_width="wrap_content"  
                   android:layout_height="wrap_content"  
                   android:layout_alignTop="@+id/btPause"  
                   android:layout_alignParentRight="true"  
                   android:layout_alignParentEnd="true"  
                   android:id="@+id/btReset" />  

            </RelativeLayout>  


    </android.support.constraint.ConstraintLayout>  

Por lo que pude entender, necesita almacenamiento persistente para el momento en que se utilizó por primera vez. Creo que SharedPreferences es una buena forma de almacenar esto en su caso.

En la función onCreate de su actividad de onCreate , puede obtener System.currentTimeInMillis() y almacenarlo en SharedPreferences como se indica aquí .

Luego, cuando necesite restablecer el tiempo, solo tiene que borrar el valor en SharedPreferences y puede establecer un nuevo valor nuevamente.

Espero que esto te dé una idea de tu implementación.

Related