`

wp wp8:后台传输服务

    博客分类:
  • wp
wp 
阅读更多
1.TransferPreferences属性设置:

后台传输服务上传最大文件大小为5M

通过手机网络连接最大下载大小为20M,若超过此大小,属性将自动更改为AllowBattery

通过wifi没有外部电源最大下载大小为100M,若超过此大小,属性设置为None

2.每个应用程序队列中未完成的最大请求个数为25个,最大并发数为2个,对大排队传输数位500

3.网络连接数组3G网络低于50kbps,wifi/usb网络低于100kbps会暂停传输并重试





上代码:

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using wp8BackgroundTransfer.Resources;
using Microsoft.Phone.BackgroundTransfer;

namespace wp8BackgroundTransfer
{
    public partial class MainPage : PhoneApplicationPage
    {
        // 构造函数
        public MainPage()
        {
            InitializeComponent();

          
        }

        BackgroundTransferRequest transferRequest;

        private void download_click(object sender, System.Windows.RoutedEventArgs e)
        {

            if (BackgroundTransferService.Requests.Count() > 25)
            {
                return;
            }

            String transferFileName = "http://m.news.cn/version_wp8.txt";
            Uri transferUri;
            try
            {
                transferUri = new Uri(Uri.EscapeUriString(transferFileName), UriKind.RelativeOrAbsolute);
            }
            catch
            {
                return;
            }

            transferRequest = new BackgroundTransferRequest(transferUri);

            transferRequest.TransferPreferences = TransferPreferences.None;

            transferRequest.TransferProgressChanged += new EventHandler<BackgroundTransferEventArgs>(transfer_TransferProgressChanged);

            transferRequest.TransferStatusChanged += new EventHandler<BackgroundTransferEventArgs>(transfer_TransferStatusChanged);

            transferRequest.Method = "GET";

            string downloadFileName = transferFileName.Substring(transferFileName.LastIndexOf("/")+1);

            Uri downloadUri = new Uri("shared/transfers/"+ downloadFileName, UriKind.RelativeOrAbsolute);

            transferRequest.DownloadLocation = downloadUri;

            transferRequest.Tag = downloadFileName;

            try
            {
                BackgroundTransferService.Add(transferRequest);
            }
            catch
            {
                return;
            }

        }

        private void cancel_click(object sender, System.Windows.RoutedEventArgs e)
        {

            if(transferRequest != null)
                removeRequest(transferRequest.RequestId);

        }

        void transfer_TransferProgressChanged(object sender, BackgroundTransferEventArgs e)
        {
           
        }

        void transfer_TransferStatusChanged(object sender, BackgroundTransferEventArgs e)
        {
            BackgroundTransferRequest transfer = e.Request;

            switch (transfer.TransferStatus)
            {
                case TransferStatus.Completed:
                    {
                        if (transfer.StatusCode == 200 || transfer.StatusCode == 206)
                        {
                            removeRequest(transfer.RequestId);
                        }
                        else
                        {
                            removeRequest(transfer.RequestId);
                            if (transfer.TransferError != null)
                            {
                                System.Diagnostics.Debug.WriteLine("失败:"+transfer.TransferError);
                            }
                        }
                    }
                    break;
                case TransferStatus.WaitingForExternalPower:
                    {
                        System.Diagnostics.Debug.WriteLine("电力不足,不能启动");
                    }
                    break;
                case TransferStatus.WaitingForExternalPowerDueToBatterySaverMode:
                    {
                        System.Diagnostics.Debug.WriteLine("省电模式,不能启动");
                    }
                    break;
                case TransferStatus.WaitingForNonVoiceBlockingNetwork:
                    {
                        System.Diagnostics.Debug.WriteLine("等待网络");
                    }
                    break;
                case TransferStatus.WaitingForWiFi:
                    {
                        System.Diagnostics.Debug.WriteLine("等待wifi网络");
                    }
                    break;
            }
        }

        void removeRequest(string id)
        {
            BackgroundTransferRequest request = BackgroundTransferService.Find(id);
            if (request != null)
            {
                BackgroundTransferService.Remove(request);
            }
        }
       
    }
}

MainPage.xaml

<phone:PhoneApplicationPage
    x:Class="wp8BackgroundTransfer.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot 是包含所有页面内容的根网格-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>


        <StackPanel Orientation="Vertical">


            <Button Content="download" Width="300" Height="100" Click="download_click"></Button>
            <Button Content="cancel" Width="300" Height="100" Click="cancel_click"></Button>
           
        </StackPanel>


    </Grid>

</phone:PhoneApplicationPage>

分享到:
评论

相关推荐

    wp7后台开发实例

    3. **BackgroundTransferService(后台传输服务)** - **网络数据传输**:`BackgroundTransferService`是WP7中用于后台下载和上传的API,即使应用不在前台运行,也能处理HTTP请求。 - **创建DownloadOperation/...

    2022最新版:READ WP V4.5.9主题:极简主义WordPress博客主题.rar

    6. **主题安装**:在WordPress中,用户可以通过FTP工具将主题文件夹上传到wp-content/themes目录,或者通过WordPress后台的“外观”&gt;“主题”进行上传安装。 7. **激活主题**:安装完主题后,用户需在WordPress后台...

    WP8系统上的VOIP应用

    微软在WP8中提供了专门的VOIP API,让开发者能够构建具有后台通话能力的应用。这些API包括启动和停止VoIP呼叫、管理通话状态、处理来电通知等功能,允许应用在后台运行,即使用户离开了应用界面,也能接收到呼叫。 ...

    wp-mail-smtp

    **SMTP (Simple Mail Transfer Protocol)** 是互联网上用于发送电子邮件的标准协议,通过使用wp-mail-smtp插件,网站可以利用SMTP服务器进行邮件传输,提高邮件送达率。 安装和配置wp-mail-smtp插件是提升WordPress...

    WP-Rocket-2.11.6

    对于WordPress的自动加载功能,WP Rocket能智能地进行优化,避免无效的后台查询。 多语言支持是WP Rocket的一大亮点,它包括中文在内的多种语言,方便全球各地的用户使用。而且,该插件易于配置,无需深入了解技术...

    wp支付宝插件

    "wp支付宝插件"正是为实现这一目标而设计的,它使WordPress网站能够无缝对接支付宝服务,提升用户体验,同时也简化了后台的财务管理。 **一、WordPress支付宝插件的功能** 1. **在线支付集成**:通过这个插件,...

    WP-Rocket-2.11.5

    1. **安装**:下载WP Rocket 2.11.5版本后,将`wp-rocket`文件上传至WordPress的`wp-content/plugins`目录,然后在WordPress后台激活插件。 2. **配置**:激活后,进入“WP Rocket”设置页面,按照引导进行简单配置...

    wp7应用发开 代码 14-15章

    4. **数据绑定**:理解如何将UI元素与后台数据模型绑定,实现动态更新和数据驱动的界面。 5. **动画和视觉效果**:掌握如何为应用添加过渡效果和动画,提升用户体验。 6. **多分辨率支持**:WP7设备有多种屏幕分辨率...

    亲测-wordpress文章实时同步发布修改删除多个站点的WP2WP插件

    在压缩包文件名称列表中只有一个名为"WP2WP"的文件,这可能是插件的安装文件,用户需要将此文件上传至WordPress的"wp-content/plugins"目录,然后通过WordPress后台激活插件。当然,这仅是推测,具体操作可能需要...

    WP7手机下载器

    在这个教程中,我们将深入探讨Windows Phone 7的后台传输服务以及如何构建一个简单的下载器应用。 BackgroundTransferService是Windows Phone SDK提供的一种服务,允许开发者创建在后台运行的下载任务,即使用户...

    wp-rocket-2.10.10

    WP-Rocket的安装非常简单,只需将解压后的“wp-rocket”文件上传到WordPress的“plugins”目录,然后在WordPress后台激活插件即可。一旦激活,大部分优化功能会自动启用,无需额外设置。对于更高级的优化,用户可以...

    wp-china-yes插件

    也可以将解压后的`wp-china-yes`文件夹上传至`wp-content/plugins`目录,然后在后台激活。 2. **配置**:激活后,在WordPress的插件设置页面,可以配置CDN服务商(如阿里云、腾讯云等)、开启或关闭各项优化功能,...

    all-in-one-wp-migration-multisite-extension_in_Woocomemrceplugin

    相比于传统的数据库导出导入、FTP文件传输等方式,All-in-One WP Migration及其Multisite Extension提供了一键式解决方案,减少了手动操作的繁琐。它支持更大的文件大小,对于大型网站尤其适用,并且可以在不中断...

    wp7搭建cs视频播放器系统

    2. **客户端设计**:在WP7客户端,开发者需要创建一个用户界面,包括视频播放控件,以及用于连接服务器和接收数据的后台逻辑。Silverlight提供了一套丰富的UI元素和动画效果,使得在WP7上构建交互性良好的应用成为...

    腾讯云COS附件WP同步插件修改版

    6. **插件安装与配置**:要使用此插件,用户需要首先在WordPress后台安装并激活,然后配置腾讯云COS的相关凭证,包括AppID、Secret ID和Secret Key。完成配置后,插件将自动开始工作。 7. **安全与维护**:虽然插件...

    令人敬畏的wp加速:插件和资源可加快和优化WordPress网站

    3. **CDN(内容分发网络)**:Cloudflare或MaxCDN等服务可以将网站内容分布在全球各地的服务器上,使得用户可以从最近的节点获取数据,显著降低延迟,提高加载速度。 4. **图像优化**:优化图片大小和格式是提升...

    wp-pagenavi_WordPress_vegetableufo_zip_

    2. **安装步骤**:将解压后的`wp-pagenavi`文件夹上传到WordPress网站的`wp-content/plugins`目录下,然后在WordPress后台的“插件”页面激活该插件。 3. **配置**:激活后,你可以在WordPress的设置菜单中找到WP-...

    wp-webdav-media:向WordPress添加WebDAV支持。 考虑到NextCloud的构建

    在这个案例中,"wp-webdav-media-main"很可能是wp-webdav-media插件的核心代码,负责连接WebDAV服务器,处理与NextCloud的通信,并提供WordPress后台的配置界面。 总结来说,"wp-webdav-media"插件利用WebDAV协议,...

    wp-license-manager-tutorial:WP 许可证管理器插件示例代码

    在本教程中,我们将深入探讨如何使用`WP License Manager`创建一个许可证管理插件,以实现WordPress主题和插件的更新系统。`WP License Manager`是一个强大的工具,它允许开发者为他们的产品添加许可证验证功能,...

    [整站程序]WordPress英文网站(带27000文章数据)_wp.rar

    1. **WordPress核心文件**:如wp-admin(管理后台)、wp-content(包含主题和插件)、wp-includes(核心功能库)等目录。 2. **主题**:自定义或预设的WordPress主题文件,决定了网站的视觉样式。 3. **插件**:增强...

Global site tag (gtag.js) - Google Analytics