2014-11-08 42 views
0

即時通訊開發一個Live Tile APP來顯示Live Tile上的當前網絡狀態。背景任務和XamlRenderingBackgroundTask&RenderTargetBitmap

我已經有一個工作XamlRenderingBackgroundTask,我可以從XML文件加載自定義拼貼模板,我將它與RenderTargetBitmap渲染到PNG文件。

但是,如果我啓動APP並註冊後臺任務,我必須等到BackgroundTask開始查看更新的活動圖塊。

據我所知,不可能從主APP使用此代碼。 RendertargetBitmap需要XAML樹中的元素或XamlRenderingBackgroundTask。

那麼,如何在註冊任務後更新Live Tile direclty?

 var small_folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets"); 
     var small_file = await small_folder.GetFileAsync("WWAN_Tile_small.xml"); 
     string small_szCustomTileXML = await Windows.Storage.FileIO.ReadTextAsync(small_file); 

     Border small_tile = XamlReader.Load(small_szCustomTileXML) as Border; 
     if (null != small_tile) 
     { 
       Grid grid = small_tile.Child as Grid; 

       Image logo = grid.FindName("img_Center") as Image; 
       var logo_img = new BitmapImage() { CreateOptions = BitmapCreateOptions.None }; 
       logo_img.UriSource = new Uri("ms-appx:///Assets/Signal/WWAN/big/3.png"); 
       logo.Source = logo_img; 

       RenderTargetBitmap rtb = new RenderTargetBitmap(); 
       await rtb.RenderAsync(small_tile, 71, 71); 
       IBuffer pixels = await rtb.GetPixelsAsync(); 
       DataReader dReader = Windows.Storage.Streams.DataReader.FromBuffer(pixels); 
       byte[] data = new byte[pixels.Length]; 
       dReader.ReadBytes(data); 

       var outputFile = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("Square71x71Logo.scale-100.png", Windows.Storage.CreationCollisionOption.ReplaceExisting); 
       var outputStream = await outputFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite); 
       BitmapEncoder enc = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, outputStream); 
       enc.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)rtb.PixelWidth, (uint)rtb.PixelHeight, 96, 96, data); 
       await enc.FlushAsync(); 
     } 

回答

0

我不認爲你可以強制他的註冊後立即執行BGTask;你可以做的是創建一個新的外部類,它可以在註冊後立即更新並在BGTask和應用程序中使用它。效果應該是一樣的。