How to solve the problem that the progress status of the audio playback control notification bar does not update

від

у

Як вирішити проблему, коли статус прогресу контролю відтворення аудіо в рядку повідомлень не оновлюється

https://ift.tt/4fw0mMZ

Прочитайте оригінальну статтю: Як вирішити проблему, що статус прогресу в рядку повідомлень керування відтворенням аудіо не оновлюється

Як вирішити проблему, що статус прогресу в рядку повідомлень керування відтворенням аудіо не оновлюється

Опис проблеми

Під час відтворення аудіо виникають такі ситуації при створенні та налаштуванні сесії AVSessionManager:

  • Прогрес у рядку сповіщень не оновлюється після встановлення статусу відтворення;
  • Після витягування рядка повідомлень спадне оновлення до нормального стану;
  • Після блокування екрану, при розблокуванні оновлення відновлюються нормально.

Базові знання

AVSession Kit : системна служба керування аудіо та відео, яка централізовано керує всіма аудіо- та відео-діяльностями в системі.
Background Tasks Kit : керування фоновими задачами. Після переходу застосунку у фоновий режим ресурси контролюються суворо. Програми повинні обирати відповідні фонові завдання для забезпечення продовження роботи.
Media Session Provider : застосунки аудіо та відео контролюють медіа-інформацію з контролера медіасесії та реагують на команди керування відтворенням, що надсилаються контролером медіасесії.

Процес усунення несправності

  1. Якщо програвання медіа, прогресбар у рядку сповіщень не діє. Спочатку перевірте, чи застосовується довготривале завдання AUDIO_PLAYBACK.
  2. Перевірте, чи правильно встановлено тривалість ресурсу, стан відтворення, позицію відтворення, швидкість та іншу інформацію. Центр керування трансляцією буде використовувати цю інформацію для відображення прогресу.

Висновок аналізу

Помилка ініціалізації статусу відтворення у центрі керування трансляцією призвела до того, що розрахунок прогресу відтворення не виконувався та не оновлювався. Статус відтворення повертався до нормального після витягування строку або блокування екрану та повторної ініціалізації.

Рішення

1. Подати запит на довготривале завдання, щоб уникнути переходу у режим Suspend та зупинки відтворення. Коли ваш застосунок потребує реалізації фонового відтворення, потрібно використати BackgroundTasks Kit для запиту відповідного довготривалого завдання, щоб уникнути переходу у режим Suspend. Для відтворення медіа слід подати запит на довготривале завдання AUDIO_PLAYBACK. Зразок коду нижче:

   backgroundTaskManager.startBackgroundRunning(this.context, backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK,
     wantAgentObj).then(() => {
     console.info("Operation startBackgroundRunning succeeded");
   }).catch((error: BusinessError) => {
     console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
   });Copy codeCopy code

2. Коректно ініціалізуйте ресурси відтворення центру керування та оновлюйте їх при зміні статусу, щоб запобігти зупинці відтворення або неправильному розрахунку прогресу відтворення. Системний центр керування відтворенням автоматично обчислює прогрес відтворення на основі тривалості ресурсу, стану відтворення (у паузі, відтворюється), позиції відтворення, швидкості та іншої інформації, установленої застосунком, без потреби в реальному оновленні прогресу. Зразок коду:

   let playbackState: AVSessionManager.AVPlaybackState = {
     state: AVSessionManager.PlaybackState.PLAYBACK_STATE_PLAY,
     position: {
       elapsedTime: 1000,
       updateTime: new Date().getTime(),
     },
     speed: 1.0,
     bufferedTime: 14000,
   };
   session.setAVPlaybackState(playbackState, (err) => {
     if (err) {
       console.error(`Failed to set AVPlaybackState. Code: ${err.code}, message: ${err.message}`);
     } else {
       console.info(`SetAVPlaybackState successfully`);
     }
   });

Зауваження

  • Стан відтворення сесії (AVPlaybackState) потрібно оновлювати лише тоді, коли змінюються стан відтворення (state), позиція відтворення (position) та швидкість відтворення (speed); інакше система може викликати помилки розрахунку.
  • Коли фактичне відтворення починається, застосунок повідомляє про прогрес, що починається з позиції відтворення (position); якщо відтворення у режимі буферизації, можна спочатку повідомити систему, що стан відтворення — AVSessionManager.PlaybackState.PLAYBACK_STATE_BUFFERING, щоб повідомити систему не оновлювати прогрес.

Перевірочний результат

Центр керування відтворенням системи автоматично обчислює та оновлює прогрес відтворення на основі стану відтворення. Програма оновлює лише тоді, коли змінюється швидкість відтворення, позиція та інша інформація.

Пов’язані документи або посилання

AVSession Kit

Автор: Мурахід Кінджір

HI-FI News

через DEV Community https://dev.to

27 лютого 2026 р. о 08:58 AM

February 27, 2026 at 08:58AM


Коментарі

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *