我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API (本地文件夹) 而不是 WP7 API (隔离存储文件).
旧的工作方法
这是我如何成功地将图像保存到/共享/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);
}
}
待解决的问题
当我使用新方法保存图像时出现问题。我似乎找不到正确的图像路径来更新图块。这是我保存图像的新方法(NOTE: 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);
}
问题是我无法将图像保存到 Shared/ShellFolder,我收到此异常消息:
文件名、目录名或卷标语法不正确。 (HRESULT 异常:0x8007007B)
如果您更新了应用程序的 LiveTile 更新,请解释您用于保存的路径以及分配给 LiveTile 图像的文件路径。
UPDATE:
罗布下面的回答修复了该异常,并允许我保存到该文件夹。我对图块更新中使用的文件路径进行了更改(感谢 Scott Lovegrove 的建议):
而不是旧的方式:
BackBackgroundImage = new Uri("isostore:/Shared/ShellContent/LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute)
我用这个成功了
BackBackgroundImage = new Uri("isostore:shared\\shellcontent\\LiveTileImagePath.jpg", UriKind.RelativeOrAbsolute)