Доступ к BackgroundMediaPlayer из другой задачи

У меня есть приложение, в котором есть две фоновые задачи: задача фонового звука и задача Bluetooth. Что я хочу сделать, так это изменить состояние воспроизведения звука из кода в задаче Bluetooth без необходимости проходить через приложение переднего плана. Я попытался поместить это в задачу Bluetooth, надеясь, что это сработает:

if (BackgroundMediaPlayer.Current.CurrentState == MediaPlayerState.Playing)
   BackgroundMediaPlayer.Current.Pause();

Но оказывается, это не работает. Несмотря на то, что воспроизводится фоновый звук, когда я обращаюсь к его состоянию из задачи Bluetooth, его значение равно MediaPlayerState.Closed(). Кто-нибудь знает, как я могу это сделать? Я думал, что это сработает, потому что BackgroundMediaPlayer — это глобальный объект, который имеет только один экземпляр во всем телефоне, но очевидно, что свойство .Current каким-то образом специфично для каждого проекта. Я заметил, что это тип MediaPlayer, поэтому могу ли я поместить объект в глобальный контейнер, к которому я могу получить доступ из обеих задач?

заранее спасибо


person Ali250    schedule 26.12.2014    source источник
comment
Я мало что знаю о фоновых задачах 8.1, но могу предположить, что они выполняются в отдельных процессах. Возможно, вам придется использовать какой-то межпроцессный механизм для связи, например. именованные каналы, сокеты, разделяемая память и т. д. (не уверен, что последний даже поддерживается для приложений магазина... возможно, нет).   -  person Peter Duniho    schedule 26.12.2014
comment
В этом проблема. Я некоторое время искал в сети и не смог найти никакой соответствующую литературу по установлению связи между двумя фоновыми задачами в WP8.1.   -  person Ali250    schedule 26.12.2014
comment
Что ж, техники, которые я упомянул, будут одинаково хорошо работать как внутри, так и между процессами. Я согласен с тем, что документации для приложений XAML/магазина довольно мало, особенно с точки зрения практических рекомендаций. И я не знаю из первых рук, что нет лучшего способа. Но наверняка, даже если они не самые лучшие, эти техники должны работать.   -  person Peter Duniho    schedule 26.12.2014


Ответы (1)


Я отвечаю только на тот случай, если кому-то вроде меня все еще нужно разрабатывать для WP8.1.

Единственный способ, которым я могу это сделать, - это иметь две фоновые задачи в одном решении и использовать ApplicationData.Current.LocalSettings для сохранения значения в настройках и вытягивать изменения через определенные промежутки времени из настроек в задаче музыкального проигрывателя.

По сути, задача фонового звука следит за настройками, чтобы увидеть, меняет ли их фоновая задача Bluetooth, а затем отвечает, приостанавливая или воспроизводя звук.

person TheAgent    schedule 15.05.2017