2014-07-23 39 views
0

我使用BackgroundTransferRequest類在我的wp8應用程序中下載mp3文件。我的一些文件超過100MB,因此我設置了transferRequest.TransferPreferences = TransferPreferences.None;。但是transfertatus方法仍然會返回給我外部電源消息。 如果你在代碼看看行12,你可以看到,我設置TransferPreferences如無BackgroundTransferRequest連接外部電源錯誤

這裏是我的代碼下載的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); 
     } 

回答

0

Documentation

如果該文件是傳輸大於100 MB,請將傳輸的TransferPreferences屬性設置爲無。如果您不這樣做,系統會自動將傳輸設置更改爲此值,這意味着傳輸只能在手機連接到外部電源並且具有Wi-Fi連接時進行。

Look at the Last Paragraph in Image