如何在后台维护应用程序行为

时间:2019-06-14 13:27:11

标签: java android service onresume

我必须编写简单的应用程序来帮助组织学习时间。
我将通过几个步骤进行审核:


1.set您的学习时间间隔,并设置休息时间
2。运行计时器
3。如果计时器停止计时,应用开始响起,并向我们显示一个“警报”对话框,以决定我们想要的休息类型(无论休息类型如何)
4。休息计时器开始的
5。如果休息计时器停止,我们必须决定是否要了解更多
6。如果我们仍然想学习,请返回步骤1。

好的。应用程序效果很好,但是当我们不在后台使用它时(但计时器一直都在工作,为此我使用了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的方法吗?
您有什么解决办法吗?


感谢您的帮助:)

0 个答案:

没有答案