Как сохранить поведение приложения в фоновом режиме - PullRequest
0 голосов
/ 14 июня 2019

Мне нужно сделать простое приложение, чтобы помочь организовать время, затрачиваемое на обучение.
Я сделаю обзор в несколько шагов:


1.set Ваш интервал обучения и то же самое для перерыва
2. таймер запуска
3. Если таймер останавливается, appliaction начинает звонить и показывает нам диалоговое окно Alert, чтобы решить, какой тип перерыва мы хотим иметь (не имеет значения, какой тип перерыва)
4. таймер перерыва начала
5. если таймер перерыва останавливается, мы должны решить, хотим ли мы узнать больше или нет
6. если мы все еще хотим учиться, вернитесь к шагу 1.

Allright. Приложение прекрасно работает, НО в ситуации, когда мы не используем его в фоновом режиме (таймер работает постоянно, для этого я использую sharedPreferences).
Хуже всего то, что у вас нет будильника и диалога.


Я покажу вам часть кода для управления этими двумя вещами:

    public void startTimer() {
    mEndTime = System.currentTimeMillis() + mTimeLeftInMillis;

    mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            mTimeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }

        @Override
        public void onFinish() {
            mTimerRunning = false;
            timerFinish=true;
            updateWatchInterface();


            if (!timeToBreak)
            {
                breakDialog();
            }
            else
            {
                learnDialog();
            }
            alarm_start();
        }
    }.start();

    mTimerRunning = true;
    updateWatchInterface();
}

 public void alarm_start() {
     if(player == null) {
        player = MediaPlayer.create(this, R.raw.iphone_alarm);
        player.setOnCompletionListener(new 
        MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                alarm_stop();
            }
        });
    }
    player.start();
}

public void alarm_stop(){
    if (player!=null)
    {
        player.release();
        player = null;
    }

}

@Override
protected void onStop() {
    super.onStop();

    SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();

    editor.putLong("startTimeInMillis", mStartTimeInMillis);
    editor.putLong("millisLeft", mTimeLeftInMillis);
    editor.putBoolean("timerRunning", mTimerRunning);
    editor.putLong("endTime", mEndTime);

    editor.apply();

    if (mCountDownTimer != null) {
        mCountDownTimer.cancel();
    }
    alarm_stop();
}

@Override
protected void onStart() {
    super.onStart();

    SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);

    mStartTimeInMillis = prefs.getLong("startTimeInMillis", 600000);
    mTimeLeftInMillis = prefs.getLong("millisLeft", mStartTimeInMillis);
    mTimerRunning = prefs.getBoolean("timerRunning", false);

    updateCountDownText();
    updateWatchInterface();

    if (mTimerRunning) {
        mEndTime = prefs.getLong("endTime", 0);
        mTimeLeftInMillis = mEndTime - System.currentTimeMillis();

        if (mTimeLeftInMillis < 0) {
            mTimeLeftInMillis = 0;
            mTimerRunning = false;
            updateCountDownText();
            updateWatchInterface();

        } else {
            startTimer();
        }
    }
}

@Override
protected void onResume() {
    super.onResume();
    if(timerFinish)
    {
        breakDialog();
    }
    else
    {

    }
}

Как вы думаете, это решение для alarm_ring, когда я использую сервис для этой функции?
У вас есть какое-нибудь решение?


Спасибо за любую помощь:)

...