我是在更新我的Windows Phone應用使用新的WP8文件存儲API(LocalFolder)的過程映像路徑,而不是WP7的API(IsolatedStorageFile)。如何獲得保存到WP8本地文件夾活瓷磚
老的工作方法
這裏是我成功的將圖像保存到使用IsolatedStorageFile方法/共享/ ShellContent文件夾(保存圖像時,注意到/Shared/ShellContent/
前綴,也是isostore:/Shared/ShellContent/
更新動態磁貼時的前綴。
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (myIsolatedStorage.FileExists("/Shared/ShellContent/LiveTileImagePath.jpg"))
{
myIsolatedStorage.DeleteFile("/Shared/ShellContent/LiveTileImagePath.jpg");
}
IsolatedStorageFileStream copyFileStream = myIsolatedStorage.CreateFile("/Shared/ShellContent/LiveTileImagePath.jpg");
wb.SaveJpeg(copyFileStream, wb.PixelWidth, wb.PixelHeight, 0, 100);
copyFileStream.Close();
//UpdateTile
ShellTile tile = ShellTile.ActiveTiles.First();
if (tile != null)
{
FlipTileData tileData = new FlipTileData()
{
Title = "title",
BackTitle = "backtitle",
BackContent = "",
WideBackContent = "",
SmallBackgroundImage = new Uri("/Images/SmallIconBW.png", UriKind.RelativeOrAbsolute),
BackgroundImage = new Uri("/Images/MediumKiss336.png", UriKind.RelativeOrAbsolute),
BackBackgroundImage = new Uri("isostore:/Shared/ShellContent/LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute),
WideBackgroundImage = new Uri("/Images/MediumKiss336.png", UriKind.RelativeOrAbsolute),
WideBackBackgroundImage = new Uri("isostore:/Shared/ShellContent/LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute)
};
tile.Update(tileData);
}
}
要解決的問題
當我使用新方法保存圖像時出現問題。我似乎無法找到正確的圖像路徑來更新瓦片。這裏是我的新方法來保存圖像(注意:fileStream
是一個MemoryStream,包含我從該方法中的一個WriteableBitmap生成的jpeg圖像。它可以很好地存儲在應用程序中使用的存儲,但不存儲到共享文件夾)
StorageFile liveTileImageFile = await localFolder.CreateFileAsync("/Shared/ShellContent/LiveTileImagePath.jpg", CreationCollisionOption.ReplaceExisting);
fileStream.Seek(0, SeekOrigin.Begin);
using(Stream sharedFolderStream = await liveTileImageFile.OpenStreamForWriteAsync())
{
await fileStream.CopyToAsync(sharedFolderStream);
}
ShellTile tile = ShellTile.ActiveTiles.First();
if (tile != null)
{
FlipTileData tileData = new FlipTileData()
{
Title = "Kiss Dictionary",
BackTitle = "name",
BackContent = "",
WideBackContent = "",
SmallBackgroundImage = new Uri("/Images/SmallIconBW.png", UriKind.RelativeOrAbsolute),
BackgroundImage = new Uri("/Images/MediumKiss336.png", UriKind.RelativeOrAbsolute),
BackBackgroundImage = new Uri("isostore:/Shared/ShellContent/LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute),
WideBackgroundImage = new Uri("/Images/MediumKiss336.png", UriKind.RelativeOrAbsolute),
WideBackBackgroundImage = new Uri("isostore:/Shared/ShellContent/LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute)
};
tile.Update(tileData);
}
的問題是,我無法將圖像保存到共享/ ShellFolder,我得到這個異常消息:
文件名,目錄名或卷標語法不正確。 (異常來自HRESULT:0x8007007B)
如果已經更新您的應用程序的更新LiveTile,請解釋一下你用來保存路徑和你分配給您的LiveTile圖像文件路徑。
UPDATE:
羅布的回答以下修復異常,並讓我保存的文件夾。我做的改變對我的瓷磚更新中使用的文件路徑(感謝Scott洛夫格羅夫的建議):
,而不是舊的方式:
BackBackgroundImage = new Uri("isostore:/Shared/ShellContent/LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute)
我用這個成功
BackBackgroundImage = new Uri("isostore:shared\\shellcontent\\LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute)
就這樣,我們很清楚你是說它吹起來的CreatFileAsync行嗎?\ –
是的,問題是,它不會遞歸獲取文件夾。羅布的答案通過自己獲取每個文件夾,然後在最後一個文件夾中創建文件來解決該問題。 –