Flutter audio_service: уведомление не исчезаетAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Flutter audio_service: уведомление не исчезает

Сообщение Anonymous »

Я разрабатываю приложение, которое позволяет пользователю просматривать коллекцию электронных книг, выбирать одну, а затем решать, читать ее или слушать. Также есть возможность переключения между чтением и прослушиванием. Поэтому существуют отдельные представления для прослушивания, чтения или просмотра аудиокниг.
Я использую плагины Flutter: audio_service и just_audio для реализации воспроизведения аудиокниг. Во время модуля приложения я создаю свой собственный AudioHandler следующим образом:

Код: Выделить всё

class AudioHandler extends BaseAudioHandler with SeekHandler {
static final AudioHandler _singleton = AudioHandler._();

static Future init() async {
var audioService = await AudioService.init(
builder: () => AudioHandler(),
config: const AudioServiceConfig(
androidNotificationChannelId: 'nl.dropcatcher.sermons.channel.audio',
androidNotificationChannelName: 'Sermon playback',
androidStopForegroundOnPause: false,
fastForwardInterval: Duration(seconds: 10),
rewindInterval: Duration(seconds: 10),
),
);
audioService.playbackState.add(PlaybackState(
controls: [
MediaControl.pause,
],
systemActions: const {
MediaAction.seek,
MediaAction.seekForward,
MediaAction.seekBackward,
},
androidCompactActionIndices: const [0],
processingState: AudioProcessingState.buffering,
playing: false,
updatePosition: Duration.zero,
bufferedPosition: Duration.zero,
speed: 1.0,
queueIndex: 0,
));
}

factory AudioHandler() {
return _singleton;
}
AudioHandler._();
}
Затем в представлении проигрывателя аудиокниг я использую AudioPlayer для воспроизведения самой аудиокниги и удаляю ее при закрытии представления:

Код: Выделить всё

class _SermonPlayerState extends State {
final AudioPlayer player = AudioPlayer();

@override
void initState() {
// ...
player.play();
}

@override
void dispose() {
// ...
AudioHandler().stop();
player.dispose();
super.dispose();
}
}
Однако уведомление Android с кнопками управления проигрывателем (создаваемое audio_service, когда AudioPlayer начинает воспроизведение) сохраняется после Dispose(), даже если оно больше не применимо. Фактически, оно сохраняется даже тогда, когда я перезагружаю приложение из отладчика Flutter. Что еще более озадачивает, так это то, что в веб-версии это работает - как только AudioPlayer удаляется, уведомление браузера с кнопками проигрывателя исчезает.
Я не вижу API для программного обеспечения скрыть уведомление. Итак, как мне избавиться от этого, когда пользователь больше не находится на странице аудиоплеера?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -disappear
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»