Мне нужно сделать простое приложение, чтобы помочь организовать время, затрачиваемое на обучение.
Я сделаю обзор в несколько шагов:
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, когда я использую сервис для этой функции?
У вас есть какое-нибудь решение?
Спасибо за любую помощь:)