Реагирование на UserAction в AudioPlayerAgent, когда приложение приостановлено

У меня есть аудиоплеер, который использует BackgroundAudioPlayer вместе с AudioPlayerAgent. Все работает нормально, за исключением одного варианта использования, с которым я не знаю, как справиться.

Если я воспроизведу звуковую дорожку в своем приложении, а затем пользователь переключится на другое приложение, звуковая дорожка продолжит воспроизводиться в фоновом режиме, как и должна, но я предполагаю, что мое приложение теперь было перемещено в память и приостановлено.

Мой вопрос: если пользователь теперь начинает воспроизводить музыку в другом приложении, я получаю действие AudioPlayerAgent.UserAction.Stop в качестве обратного вызова для моего AudioAgent. Но могу ли я что-нибудь сделать с этим сейчас с точки зрения моего приложения? Я имею в виду, я хотел бы сохранить позицию воспроизведения аудио, где пользователь был в моем приложении, но мое приложение было приостановлено, верно?

Когда мое приложение находится на переднем плане и звук останавливается, я получаю событие BackgroundAudioPlayer.Instance.PlayerState.Stopped. Именно сюда я обычно сохраняю позицию воспроизведения. Но если пользователь переключается на другое приложение для воспроизведения музыки, я не получаю это событие.

Поэтому мне просто интересно, как справиться с таким случаем. Могу ли я что-нибудь сделать, чтобы улучшить пользовательский опыт?


person Johan Paul    schedule 19.12.2012    source источник
comment
единственный способ - сохранить эту позицию в изолированном хранилище в коде агента.   -  person onmyway133    schedule 19.12.2012
comment
После написания этого вопроса я также думал об изолированном хранилище. Просто не был уверен, что это доступно из кода агента. Кажется, это так. Попытаюсь. Спасибо!   -  person Johan Paul    schedule 19.12.2012
comment
@JohanPaul. Убедитесь, что вы используете Mutex при доступе к изолированному хранилищу, иначе ваше приоритетное приложение и фоновый агент могут попытаться получить к нему доступ одновременно.   -  person Richard Szalay    schedule 19.12.2012


Ответы (1)


Единственный способ — сохранить эту позицию в Isolated Storage в коде агента.

См. этот очень полезная статья Пола о том, как использовать агент фонового звука и как общаться между пользовательским интерфейсом и агентом.

person onmyway133    schedule 19.12.2012
comment
Когда я получаю событие PlayState.Stopped в результате запуска внешнего приложения, кажется, что свойство player.Position больше недоступно. Любые идеи, как получить позицию трека до того, как произошло остановленное событие (или во время него...)? - person Johan Paul; 19.12.2012