Как сохранить таймер обратного отсчета с помощью SharedPrefences? - PullRequest
0 голосов
/ 06 октября 2018

У меня таймер обратного отсчета 60 сек.Я хочу, чтобы секунды продолжались, когда пользователь покидает приложение.Я пытался много раз, но не смог. Этот таймер начнет обратный отсчет при входе в приложение. Например, когда я вхожу в приложение через 20 секунд, таймер продолжится через 40 секунд, здесь мои коды

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    sp5 = PreferenceManager.getDefaultSharedPreferences(this);
    xtime=System.currentTimeMillis()- 
    sp5.getLong("TIME",System.currentTimeMillis());
    long timer5=mTimeLeftinMilis5-xtime;
    final SharedPreferences.Editor editor = sp5.edit();
    editor.putLong("TIME",timer5);
    editor.commit();
}

public void StartTimer5(){
    mCountDownTimer5=new CountDownTimer(mTimeLeftinMilis5,1000) {
        @Override
        public void onTick(long l5) {
            mTimeLeftinMilis5=l5;
            updateCountDownText5();
        }
        @Override
        public void onFinish() {
            mTimerRunning5=false;
            btn_kalp5.setBackgroundResource(R.drawable.kalp);
            cankontrol--;
            tv_countdown5.setVisibility(View.GONE);
        }
    }.start();
    mTimerRunning5=true;
    xtime=System.currentTimeMillis();
    SharedPreferences.Editor editor2 = sp5.edit();
    editor2.putLong("TIME",xtime);
    editor2.commit();
}

1 Ответ

0 голосов
/ 06 октября 2018
package com.besli.timer;

import android.content.SharedPreferences;
import android.os.CountDownTimer;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    CountDownTimer timer;
    int globalTime = 60;
    TextView timeText;
    SharedPreferences sharedPreferences;

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

        timeText = findViewById(R.id.timeTextGlobal);
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        if(sharedPreferences.getInt("Time",0) != 0){
            globalTime = sharedPreferences.getInt("Time",0);
        }


        timer = new CountDownTimer(globalTime * 1000,1000) {
            @Override
            public void onTick(long l) {
                globalTime -= 1;
                timeText.setText(String.valueOf(globalTime));
            }

            @Override
            public void onFinish() {
                globalTime = 60;
            }
        }.start();
    }


    @Override
    protected void onStop() {
        super.onStop();
        sharedPreferences.edit().putInt("Time",globalTime).apply();
    }

}

Это не ясное решение.Но вы можете проверить onStop ().Когда пользователь пытается выйти из приложения, я получаю оставшееся время и сохраняю его в кеше.Затем для второго запуска я получаю оставшееся время и снова начинаю обратный отсчет.

Вы можете сохранить текущее время, когда пользователь выходит из системы, и когда пользователь в следующий раз открыл ваше приложение, вы можете рассчитать разницу.Если разница составляет 300 секунд;Вы можете дать еще 5 сердец.

Для онлайн-времени вы можете легко использовать таймер обратного отсчета в фоновом режиме.

Надеюсь, это поможет вам.

...