Amazing-Ren

导航

例子:Backup Isolated Storage To SkyDrive

本例演示了如何从隔离存储中备份文件到SkyDrive。

 

1. 登陆微软网站,申请“Create application”,获取一个“Client ID”

2. XAML中添加对Live相关控件库的命令控件

xmlns:my="clr-namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"

3. 使用Live控件 (<my:SignInButton Name="btnSignIn"/>

<!--LayoutRoot is the root grid where all page content is placed-->
   <Grid x:Name="LayoutRoot" Background="Transparent">
       <Grid.RowDefinitions>
           <RowDefinition Height="Auto"/>
           <RowDefinition Height="*"/>
       </Grid.RowDefinitions>


       <Image x:Name="cameraImage" Height="400" Width="480" />


       <!--Button StackPanel to the right of viewfinder>-->
       <Grid x:Name="ContentPanel" Grid.Row="1" Grid.Column="1" Margin="12,0,12,0">
           <StackPanel>
               <Button x:Name="btnShowCamera" Content="Show Camera"  FontSize="26" FontWeight="ExtraBold" Height="75" Click="btnShowCamera_Click" />
               <!--CHANGE ClientId to your own client ID. Leave the rest the same-->
               <my:SignInButton Name="btnSignIn"/>
               <Button x:Name="btnBackup" Click="btnBackup_Click" Content="Backup" IsEnabled="False" />
               <TextBlock x:Name="tbDate" TextWrapping="Wrap" Margin="12, 30, 12, 12"/>
           </StackPanel>
       </Grid>


       <!--Used for debugging >-->
       <TextBlock Height="40" HorizontalAlignment="Left" Margin="8,428,0,0" Name="tbDebug" VerticalAlignment="Top" Width="626" FontSize="24" FontWeight="ExtraBold" />
   </Grid>


4. 申明相关成员 LiveConnectClient  LiveConnectSession

       private LiveConnectClient client = null;
       private LiveConnectSession session = null;
       private string strSkyDriveFolderName = "IsolatedStorageFolder"; // The folder name for backups
       private string strSkyDriveFolderID = string.Empty;              // The id of the folder name for backups
       private string fileID = null;                                   // The file id of your backup file
       private IsolatedStorageFileStream readStream = null;            // The stream for restoring data 
       private string fileName = "MyAppBackup.jpg";                    // Backup name for the capture image.  


5. 初始化live中APP相关注册信息

           btnSignIn.ClientId = "00000000480E7666";
           btnSignIn.Scopes = "wl.basic wl.signin wl.offline_access wl.skydrive_update";
           btnSignIn.Branding = BrandingType.Windows;
           btnSignIn.TextType = ButtonTextType.SignIn;
           btnSignIn.SessionChanged += btnSignIn_SessionChanged;

6. 处理SigninButton控件相关事件

private void btnSignIn_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
       {
           // If the user is signed in.
           if (e.Status == LiveConnectSessionStatus.Connected)
           {
               session = e.Session;
               client = new LiveConnectClient(e.Session);
               // Write message to the UI thread.
               UpdateUIThread(tbDebug, "Accessing SkyDrive...");


               // Get the folders in their skydrive.
               client.GetCompleted +=
                   new EventHandler<LiveOperationCompletedEventArgs>(btnSignin_GetCompleted);
               client.GetAsync("me/skydrive/files?filter=folders,albums");
           }
           else  // Otherwise the user isn't signed in.
           {
               // Write message to the UI thread.
               UpdateUIThread(tbDebug, "Not signed in.");
               client = null;
           }
       }


       /// <summary>
       /// Event for if the user just logged in.
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       void btnSignin_GetCompleted(object sender, LiveOperationCompletedEventArgs e)
       {
           if (e.Error == null)
           {
               // Write message to the UI thread.
               UpdateUIThread(tbDebug, "Loading folder...");


               // Check all the folders in user's skydrive.
               Dictionary<string, object> folderData = (Dictionary<string, object>)e.Result;
               List<object> folders = (List<object>)folderData["data"];


               // Loop all folders to check if the isolatedstoragefolder exists.
               foreach (object item in folders)
               {
                   Dictionary<string, object> folder = (Dictionary<string, object>)item;
                   if (folder["name"].ToString() == strSkyDriveFolderName)
                       strSkyDriveFolderID = folder["id"].ToString();
               }


               // If the IsolatedStorageFolder does not exist, create it.
               if (strSkyDriveFolderID == string.Empty)
               {
                   Dictionary<string, object> skyDriveFolderData = new Dictionary<string, object>();
                   skyDriveFolderData.Add("name", strSkyDriveFolderName);
                   client.PostCompleted += new EventHandler<LiveOperationCompletedEventArgs>(CreateFolder_Completed);
                   // To create the IsolatedStorageFolder in Skydrive.
                   client.PostAsync("me/skydrive", skyDriveFolderData);


                   // Write message to the UI thread.
                   UpdateUIThread(tbDebug, "Creating folder...");
               }
               else  // Check if the backup file is in the IsolatedStorageFile
               {
                   // Write message to the UI thread.
                   UpdateUIThread(tbDebug, "Ready to backup.");
                   UpdateUIThread(tbDate, "Checking for previous backups...");
                   btnBackup.IsEnabled = true;


                   // Get the files' ID if they exists.
                   client = new LiveConnectClient(session);
                   client.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(getFiles_GetCompleted);
                   // Get the file in the folder.
                   client.GetAsync(strSkyDriveFolderID + "/files");
               }
           }
           else
           {
               MessageBox.Show(e.Error.Message);
           }
       }

 

7. 开始上传操作  client.UploadAsync

                   using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
                   {
                       // Upload many files.
                       foreach (string itemName in iso.GetFileNames())
                       {
                           fileName = itemName;
                           readStream = iso.OpenFile(fileName, FileMode.Open, FileAccess.Read);
                           client.UploadAsync(strSkyDriveFolderID, fileName, readStream, OverwriteOption.Overwrite, null);
                       }

 

 

 

 

 

 

 

 

 

 

 

posted on 2013-08-14 15:21  Amazing-Ren  阅读(217)  评论(0编辑  收藏  举报