Как я могу заставить CountDownTimer сохраняться в Android в течение длительного времени? ⇐ Android
Как я могу заставить CountDownTimer сохраняться в Android в течение длительного времени?
Я пытаюсь создать таймер обратного отсчета, который пользователь может установить, и как только он достигнет нуля, будет воспроизводиться звук. Однако у меня проблема с длинными таймерами, когда звук воспроизводится не тогда, когда таймер достигает нуля, а когда я разблокирую телефон. Также в этом случае состояние приложения сбрасывается до основного действия. Используя службу переднего плана, я могу заставить таймер работать до 30 минут или около того. Без приоритетной службы максимальное время составляло менее десяти минут. Что мне нужно использовать, чтобы таймер работал?
Вот наиболее важные фрагменты кода:
// Класс TimerActivity переопределить удовольствие onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) привязка = ActivityTimerBinding.inflate(layoutInflater) setContentView(binding.root) textViewTimer = привязка.textViewTimer buttonPause = привязка.buttonPause buttonStop = привязка.buttonStop mediaPlayer = MediaPlayer.create(this, R.raw.timersound) mediaPlayer.isLooping = ложь buttonPause.setOnClickListener { если (!isTimerPaused) { // Приостановить таймер обратного отсчета обратный отсчетTimer.cancel() isTimerPaused = правда buttonPause.text = getString(R.string.resume) Intent(applicationContext, TimerService::class.java).также { it.action = TimerService.PAUSE startService(оно) } } еще { // Возобновляем таймер обратного отсчета startCountdownTimer(timeRemainingMillis) isTimerPaused = ложь buttonPause.text = getString(R.string.pause) } } buttonStop.setOnClickListener { FinishAndReturnActivity(timeRemainingMillis) } val timerMinutes = Intent.getLongExtra("timerMinutes", 1) startCountdownTimer(timerMinutes * 60 * 1000) } личное развлечение createCountDownTimer(millis: Long): CountDownTimer { // Создаём и возвращаем новый CountDownTimer возвращаемый объект: CountDownTimer(миллис, 1000) { переопределить удовольствие onTick(millisUntilFinished: Long) { // Обновляем отображение обратного отсчета на каждом тике timeRemainingMillis = millisUntilFinished вал минут = (millisUntilFinished / 1000) / 60 val секунд = (millisUntilFinished / 1000) % 60 val formattedTime = String.format("%02d:%02d", минуты, секунды) textViewTimer.text = форматированноевремя } переопределить удовольствие onFinish() { textViewTimer.text = "00:00" playBellSound() val timeLeft: Long = 0 FinishAndReturnActivity (времяЛефт) } } } частное развлечение startCountdownTimer(миллис: длинный) { Intent(applicationContext, TimerService::class.java).также { it.action = TimerService.START startService(оно) } // Инициализируем таймер обратного отсчета с начальным временем timerMinutes минут countdownTimer = createCountDownTimer(миллис) обратный отсчетTimer.start() } // Класс TimerService переопределить fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { когда (намерение?.действие) { СТАРТ -> старт() ПАУЗА -> stopSelf() } вернуть super.onStartCommand(намерение, флаги, startId) } начало частного веселья() { val Notification = NotificationCompat.Builder(это, CHANNEL_ID) .setContentTitle("Таймер работает") .setContentText("Ваш таймер активен.") .строить() startForeground(1, уведомление) }
Я пытаюсь создать таймер обратного отсчета, который пользователь может установить, и как только он достигнет нуля, будет воспроизводиться звук. Однако у меня проблема с длинными таймерами, когда звук воспроизводится не тогда, когда таймер достигает нуля, а когда я разблокирую телефон. Также в этом случае состояние приложения сбрасывается до основного действия. Используя службу переднего плана, я могу заставить таймер работать до 30 минут или около того. Без приоритетной службы максимальное время составляло менее десяти минут. Что мне нужно использовать, чтобы таймер работал?
Вот наиболее важные фрагменты кода:
// Класс TimerActivity переопределить удовольствие onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) привязка = ActivityTimerBinding.inflate(layoutInflater) setContentView(binding.root) textViewTimer = привязка.textViewTimer buttonPause = привязка.buttonPause buttonStop = привязка.buttonStop mediaPlayer = MediaPlayer.create(this, R.raw.timersound) mediaPlayer.isLooping = ложь buttonPause.setOnClickListener { если (!isTimerPaused) { // Приостановить таймер обратного отсчета обратный отсчетTimer.cancel() isTimerPaused = правда buttonPause.text = getString(R.string.resume) Intent(applicationContext, TimerService::class.java).также { it.action = TimerService.PAUSE startService(оно) } } еще { // Возобновляем таймер обратного отсчета startCountdownTimer(timeRemainingMillis) isTimerPaused = ложь buttonPause.text = getString(R.string.pause) } } buttonStop.setOnClickListener { FinishAndReturnActivity(timeRemainingMillis) } val timerMinutes = Intent.getLongExtra("timerMinutes", 1) startCountdownTimer(timerMinutes * 60 * 1000) } личное развлечение createCountDownTimer(millis: Long): CountDownTimer { // Создаём и возвращаем новый CountDownTimer возвращаемый объект: CountDownTimer(миллис, 1000) { переопределить удовольствие onTick(millisUntilFinished: Long) { // Обновляем отображение обратного отсчета на каждом тике timeRemainingMillis = millisUntilFinished вал минут = (millisUntilFinished / 1000) / 60 val секунд = (millisUntilFinished / 1000) % 60 val formattedTime = String.format("%02d:%02d", минуты, секунды) textViewTimer.text = форматированноевремя } переопределить удовольствие onFinish() { textViewTimer.text = "00:00" playBellSound() val timeLeft: Long = 0 FinishAndReturnActivity (времяЛефт) } } } частное развлечение startCountdownTimer(миллис: длинный) { Intent(applicationContext, TimerService::class.java).также { it.action = TimerService.START startService(оно) } // Инициализируем таймер обратного отсчета с начальным временем timerMinutes минут countdownTimer = createCountDownTimer(миллис) обратный отсчетTimer.start() } // Класс TimerService переопределить fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { когда (намерение?.действие) { СТАРТ -> старт() ПАУЗА -> stopSelf() } вернуть super.onStartCommand(намерение, флаги, startId) } начало частного веселья() { val Notification = NotificationCompat.Builder(это, CHANNEL_ID) .setContentTitle("Таймер работает") .setContentText("Ваш таймер активен.") .строить() startForeground(1, уведомление) }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как избежать замедления в течение длительного периода времени в бесконечной анимации CSS?
Anonymous » » в форуме CSS - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как разрешить приложению PairVPN работать в фоновом режиме в течение длительного времени?
Anonymous » » в форуме IOS - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Что произойдет, если MyBatis SqlSession не закроется в течение длительного времени?
Anonymous » » в форуме JAVA - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сделать LiveActivity Intry Run в течение длительного периода времени?
Anonymous » » в форуме IOS - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-