4

我正在尝试LiveConnectClient.BackgroundUploadAsync在 wp8 中使用,以上传一些数据的副本。

她是我的代码:

var progress = new Progress<LiveOperationProgress>();
progress.ProgressChanged += progress_ProgressChanged;
try
{
   LiveOperationResult res = 
        await liveClient.BackgroundUploadAsync(folderID,
              new Uri(@"\shared\transfers\" + backupFile.Name, UriKind.Relative),
              OverwriteOption.Overwrite, new System.Threading.CancellationTokenSource().Token, progress);
   dynamic result = res.Result;
   fileID = result.id;
}
catch (Exception ex)
{
    System.Diagnostics.Debug.WriteLine(ex.Message);
    progress.ProgressChanged -= progress_ProgressChanged;
}

它在模拟器上工作正常,但是当我在手机上尝试它时,它只有在手机通过 USB 连接到电脑时才工作,手机连接到 wifi。

4

1 回答 1

4

您正面临BackgroundTransfer Policies的“问题” 。

操作系统对与文件大小、连接速度和设备资源相关的后台传输实施了许多限制。

这意味着当您下载/上传较大的文件时,您需要更改TransferPreferences - 例如,如果您要上传大于 100 Mb 的文件,您将能够这样做,但只能通过 WiFi 并且手机连接到外部电源.

在您的应用程序中,您应该在开始下载/上传之前检查 WiFi 连接和电源,然后通知用户他应该(例如)打开 WiFi 以对如此大的文件执行操作。

您可以选择:

// small files but via 3G and on Battery
liveClient.BackgroundTransferPreferences = BackgroundTransferPreferences.AllowCellularAndBattery;

// larger files via WiFi, on Battery
liveClient.BackgroundTransferPreferences = BackgroundTransferPreferences.AllowBattery;

// huge files but only WiFi and External power
liveClient.BackgroundTransferPreferences = BackgroundTransferPreferences.None;

默认设置是none- 因此,如果您没有更改它,您的应用程序将等待外部电源和 WiFi - 这可能就是它在通过 USB(外部电源)连接时工作的原因。

于 2014-03-16T12:42:39.630 回答