Можно ли запустить фоновую передачу из агента фонового звука?

Я хочу запустить Background file transfer из Background audio agent, но получаю сообщение об ошибке с примером кода, который правильно работает в приложении переднего плана.

Вот пример:

string transferFileName = @"http://www.reggaeavenue.com/MP3/leave%20short.mp3";
Uri transferUri = new Uri(Uri.EscapeUriString(transferFileName), UriKind.RelativeOrAbsolute);

BackgroundTransferRequest transferRequest = new BackgroundTransferRequest(transferUri);

transferRequest.Method = "GET";

string downloadFile = "result.mp3";
Uri downloadUri = new Uri("shared/transfers/" + downloadFile, UriKind.RelativeOrAbsolute);
transferRequest.DownloadLocation = downloadUri;

transferRequest.Tag = downloadFile;

transferRequest.TransferPreferences = TransferPreferences.AllowCellularAndBattery;

try
{
   BackgroundTransferService.Add(transferRequest);
}
catch (InvalidOperationException ex)
{
     MessageBox.Show("Unable to add background transfer request. " + ex.Message);
}
catch (Exception)
{
     MessageBox.Show("Unable to add background transfer request.");
}

В строке с добавлением TransferRequest в BackgroundTransferService я получаю сообщение об ошибке:

System.InvalidOperationException: Operation is not valid due to the current state of the object.
   at Microsoft.Phone.BackgroundTransfer.BackgroundTransferRequest.SubmitHelper()
   at Microsoft.Phone.BackgroundTransfer.BackgroundTransferRequest.Submit()
   at Microsoft.Phone.BackgroundTransfer.BackgroundTransferService.Add(BackgroundTransferRequest request)
   at Project.AudioPlaybackAgent.AudioPlayer.CreateBackgroundTransfer()

Так можно ли запустить трансфер из фонового агента? Как я могу это исправить? Спасибо


person Libor Zapletal    schedule 22.12.2013    source источник


Ответы (1)


Согласно MSDN некоторые API (включая фоновую передачу) не поддерживаются в фоновых агентах. Даже если вам удастся что-то сделать, ваше приложение может не пройти сертификационные тесты.

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

person Romasz    schedule 22.12.2013
comment
Спасибо, не могу найти. Потому что я хочу кэшировать песни, а затем воспроизводить их. И я тоже хочу кэшировать их из фона. - person Libor Zapletal; 22.12.2013
comment
Конечно, вы можете подключить фоновый звук и ваш основной пользовательский интерфейс, этот основной пользовательский интерфейс загружает (в фоновом режиме) файлы и обновляет список воспроизведения. Загрузка в обратном агенте может быть сложной, обратите внимание, что у вас есть ограниченное время (30 с) для завершения вызванного состояния (до отправки NotifyComplete()) - если ваше время истечет, ваш агент будет убит. - person Romasz; 22.12.2013
comment
Да, я могу загрузить его в фоновом агенте, но когда пользователь пытается использовать элементы управления, ничего не происходит. Сначала агент должен быть убит, а затем может быть создан новый, который обрабатывает ответ, и это неприемлемо для меня. - person Libor Zapletal; 22.12.2013