Windows Phone 8项目中使用SkyDrive API的基础概念

移动开发中,一个常见的任务是在用户的设备之间共享应用程序文件,或者将文件存储在设备外部。有许多云服务,如Microsoft SkyDrive、DropBox、Google Drive等,允许开发者使用它们的API来实现这些目的。可能会考虑在应用程序中使用一系列云服务,并让用户有机会选择一个来存储和同步应用程序文件。这种方法有一些优点和一些缺点。认为,如果为多个平台(例如Android、Windows Phone、iOS等)创建应用程序,绝对应该使用几种服务——用户可能已经有了其中一个账户,而没有其他账户。在这种情况下,可能应该允许他使用他已有的账户,而不是让他注册一个新账户,尽管现在必须支持一个更大的代码库。

Windows Phone平台的SkyDrive API

让看看Windows Phone平台的情况。微软有自己的云存储服务——Microsoft SkyDrive。每个Windows Phone用户不需要为这项服务注册一个新账户,因为他或她已经拥有一个了!

可以在MSDN上找到如何在项目中使用SkyDrive API的文档。话虽如此,将与SkyDrive的交互集成到Windows Phone应用程序中可能会相当棘手。因此,创建了一个简单的辅助类——SkyDriveFileHandler,用于使用SkyDrive服务(上传、下载和同步)处理文件。

在本文中,将解释如何在应用程序中使用它,以及使用SkyDrive API的一些基本概念。

演示应用程序

创建了一个简单的演示应用程序,展示了如何在实际项目中使用SkyDriveFileHandler。可以通过上面的链接下载它。该应用程序包含三个按钮,它们有用于异步上传、下载和同步文件的事件处理程序。如果操作成功完成,它将显示一个消息框,文本显示一切正常。如果用户没有登录Microsoft账户,它将显示账户的登录表单。

设置开发环境和项目

请按照以下步骤设置项目:

1. 创建一个新的Windows Phone8项目

2. 添加对Microsoft.Live.dll和Microsoft.Live.Controls.dll的引用。这些库提供了一组组件和方法,使用SkyDrive API与SkyDrive服务进行通信。在Visual Studio中,可以使用NuGet包管理器来获取Live SDK包,该包包括它们。

3. 将SkyDriveFileHandler类添加到项目中。

强烈推荐下载Windows Phone Power Tools,它将允许使用GUI而不是命令行上的IsolatedStorage文件浏览器来浏览手机或手机模拟器的IsolatedStorage。可以观察应用程序文件位于IsolatedStorage及其属性,以找出文件何时与SkyDrive正确同步。

为了能够使用LiveSDK,必须在Live Connect Developer Center注册应用程序,并获取ClientID。当创建辅助类实例以连接到SkyDrive时,将使用它。

使用SkyDriveFileHandler类

首先,不要忘记添加对Microsoft SkyDrive API的引用:

using Microsoft.Live; using Microsoft.Live.Controls;

然后,应该定义一个会话变量或属性,它将用于与SkyDrive交互。更喜欢在App.xaml.cs中这样做,以便在应用程序的任何地方都可以访问它。

public static LiveConnectSession LiveSession { get; set; }

创建了会话变量后,让在电话页面中创建辅助类对象:

private SkyDriveFileHandler skydrive;

应该知道的一个非常重要的事情是——只能在应用程序页面完全加载后创建SkyDriveFileHandler的实例。不要试图在页面构造函数中初始化它!相反,可以在“页面加载”事件处理程序或任何其他GUI元素的事件处理程序中这样做,例如按钮等。类的构造函数需要指定一个文件夹名称,该文件夹将包含应用程序的文件作为第三个参数(在例子中是"skydrivetestapp")。

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { // WARNING! 第三个参数是应用程序ID,在SkyDrive注册应用程序后会得到 skydrive = new SkyDriveFileHandler(App.LiveSession, "your_application_id", "skydrivetestapp"); }

使用这个辅助类非常简单。该类有三个公共成员:

public async Task UploadFile(string fileName); public async Task DownloadFile(string fileName); public async Task SynchronizeFile(string fileName);

认为它们的目的很明显。UploadFile获取一个文件的名称,并尝试在IsolatedStorage中找到它,并将其上传到具有完全相同名称的SkyDrive文件夹。DownloadFile异步地从SkyDrive下载文件,并将其保存在IsolatedStorage中。SynchronizeFile尝试在本地存储和SkyDrive文件夹中找到给定文件名的文件。然后它比较两个文件的更改日期,并用更新的文件替换旧文件。如果在IsolatedStorage中没有找到文件,该方法将从SkyDrive下载它,反之亦然——如果文件存在于IsolatedStorage中但不存在于SkyDrive文件夹中,该方法将其上传到SkyDrive。

这些方法返回一个OperationStatus枚举类型的变量。可以检查它以知道操作是否成功完成。那么让看看如何在应用程序中使用这些方法:

private async void btnUpload_Click(object sender, RoutedEventArgs e) { if (await skydrive.UploadFile(fileName) == OperationStatus.Completed) MessageBox.Show("文件已上传!"); } private async void SynchronizeBtn_Click(object sender, RoutedEventArgs e) { if (await skydrive.SynchronizeFile(fileName) == OperationStatus.Completed) MessageBox.Show("文件已成功同步!"); } private async void DownloadBtn_Click(object sender, RoutedEventArgs e) { if (await skydrive.DownloadFile(fileName) == OperationStatus.Completed) MessageBox.Show("文件已下载到IsolatedStorage!"); }

不要忘记将方法标记为"async"——所有方法都在后台异步工作,以免阻塞应用程序用户界面。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485