BackgroundTransferRequest连接外部电源错误

时间:2014-07-23 14:00:34

标签: c# windows-phone-8

我使用BackgroundTransferRequest类在我的wp8应用程序中下载mp3文件。我的一些文件超过100mb,因此我设置了transferRequest.TransferPreferences = TransferPreferences.None;。但是,transfertatus方法仍然返回外部电源消息。 如果你看代码中的第12行,你可以看到我将TransferPreferences设置为无

这是我下载mp3文件的代码:

private void download_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if (transferFileName != null)
            {
                Uri transferUri = new Uri(Uri.EscapeUriString(transferFileName), UriKind.RelativeOrAbsolute);
                BackgroundTransferRequest transferRequest = new BackgroundTransferRequest(transferUri);
                transferRequest.Method = "GET";
                string downloadFile = transferFileName.Substring(transferFileName.LastIndexOf("/") + 1);
                Uri downloadUri = new Uri("shared/transfers/" + downloadFile, UriKind.RelativeOrAbsolute);
                transferRequest.DownloadLocation = downloadUri;
                transferRequest.Tag = downloadFile;
                transferRequest.TransferPreferences = TransferPreferences.None;

                try
                {
                    BackgroundTransferService.Add(transferRequest);
                }
                catch (InvalidOperationException ex)
                {
                    // TBD - update when exceptions are finalized
                    MessageBox.Show("Unable to add background transfer request. " + ex.Message);
                }
                catch (Exception e2)
                {
                    MessageBox.Show("Unable to add background transfer request."+e2.ToString());
                }
                transferRequest.TransferStatusChanged += new EventHandler<BackgroundTransferEventArgs>(transfer_TransferStatusChanged);
                transferRequest.TransferProgressChanged += new EventHandler<BackgroundTransferEventArgs>(transfer_TransferProgressChanged);



            }
            else
                MessageBox.Show("select an mp3 file to download");


        }

        private void ProcessTransfer(BackgroundTransferRequest transfer)
        {
            switch (transfer.TransferStatus)
            {
                case TransferStatus.Completed:
                    if (transfer.StatusCode == 200 || transfer.StatusCode == 206)
                    {
                        RemoveTransferRequest(transfer.RequestId);
                        processresult.Text = "";
                        download.Visibility = Visibility.Visible;
                        lnk = new linkname();
                        URLListBox.ItemsSource = lnk.obj();

                        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
                        {
                            string filename = transfer.Tag;
                            if (isoStore.FileExists(filename))
                            {
                                isoStore.DeleteFile(filename);
                            }
                            isoStore.MoveFile(transfer.DownloadLocation.OriginalString, filename);
                        }

                    }
                    else
                    {
                        RemoveTransferRequest(transfer.RequestId);

                        if (transfer.TransferError != null)
                        {
                            MessageBox.Show(transfer.TransferError.ToString());
                        }
                    }
                    break;

                case TransferStatus.WaitingForExternalPower:
                    WaitingForExternalPower = true;
                    processresult.Text = "Waiting For External Power";
                    break;

                case TransferStatus.WaitingForExternalPowerDueToBatterySaverMode:
                    WaitingForExternalPowerDueToBatterySaverMode = true;
                    processresult.Text = "Waiting For External Power Due To Battery Saver Mode";
                    break;

                case TransferStatus.WaitingForNonVoiceBlockingNetwork:
                    WaitingForNonVoiceBlockingNetwork = true;
                    processresult.Text = "Waiting For Non Voice Blocking Network";
                    break;

                case TransferStatus.WaitingForWiFi:
                    WaitingForWiFi = true;
                    processresult.Text = "Waiting For WiFi";
                    break;
            }
        }
 private void transfer_TransferStatusChanged(object sender, BackgroundTransferEventArgs e)
        {
            ProcessTransfer(e.Request);
        }

1 个答案:

答案 0 :(得分:0)

来自Documentation

如果要传输的文件大于100 MB,请将传输的TransferPreferences属性设置为None。如果不这样做,系统将自动将传输设置更改为此值,这意味着仅当手机连接到外部电源并具有Wi-Fi连接时才会进行传输。

Look at the Last Paragraph in Image