Windows 8.1 Preview 为应用内文件管理提供增强支持,应用可访问的用户库选择范围更宽以及可以将应用的唯一内容推送至 Windows 索引。 这意味着你的应用可轻松访问用户内容并且使其自身内容轻松显示给其他应用。
Windows 8.1 Preview 中的新特性或更新
- 更新后的文件选取器支持新的应用显示模式
- 应用内的用户库管理
- 检索父文件或文件夹
- 使用 IsEqual 来比较文件
- 新增的 KnownFolders 属性
- 文件检索时无错误处理要求
- 在打开(方式)应用场景中允许查看文件
- 将应用内容添加到 Windows 索引中
- Microsoft SkyDrive
- DDS 图像文件支持
更新后的文件选取器支持新的应用显示模式
在 Windows 8.1 Preview 中,以拆分屏幕和全屏显示方式运行的应用可以调用文件选取器。这有助于用户操作,并且可以根据他们的需要,执行多项任务。例如,假如用户在一个窗口中打开 了 Skype 会话,而在另一窗口中打开了电子邮件应用,电子邮件应用可以为用户打开文件选取器以便包含一个附件,而此时应用无需转成全屏显示。若要了解有关使用文件选 取器的详细信息,请参阅快速入门:使用文件选取器访问文件。
应用内的用户库管理
Windows 8.1 Preview 引入了 StorageLibrary 类,该类允许用户在应用内管理其个人库(例如“音乐”和“视频”)中的文件夹。这在媒体库应用中特别有用,因为用户通常需要添加含有大量图像、音乐或视频的文件夹来扩展其集合。
经过特殊化处理的文件选取器可以实现上述需求,使用 StorageLibrary 方法进行调用后,允许用户将文件夹添加到他们的库中。用户不再需要退出应用并转到桌面上来扩展他们的媒体集合。
Note 新的 StorageLibrary 类还可以定义一个从库中删除文件的方法,但是若要在应用中实现该功能,则需要自定义的 UI 元素。
检索父文件或文件夹
Windows 8 的存储 API 没有定义直接检索存储项的父文件夹的方法,所以要求你编写自己的自定义逻辑。在 Windows 8.1 Preview 中,你可以使用 GetParentAsync 方法获取文件或文件夹的父 StorageFolder。
Important 要让 GetParentAsync 方法成功,你必须拥有对父级的访问权限,可通过声明库能力或在未来访问列表中保留更高级的文件夹实现。 此外,如果你无法访问父文件或文件夹,此方法也不会抛出异常,而是返回 null。
使用 IsEqual 来比较文件
若要直接比较各个存储项以确定它们是否表示的是相同的项,Windows 8 的存储 API 并没有定义此方法。开发人员通过比较路径来解决这个问题,然而他们仍可能会遇到不具备路径值的存储项。在 Windows 8.1 Preview 中,你可以使用 IsEqual 方法来确定两个存储项是否显示的是相同的文件。
下面的示例显示了如何使用新方法比较两个存储文件是否相同。
- function openNewFile() {
- var picker = new Windows.Storage.Pickers.FileOpenPicker;
- picker.fileTypeFilter.replaceAll(["*"]);
- picker.pickSingleFileAsync().then(function (file) {
- var alreadyOpenedFile = null;
- _openFiles.some(function (openFile) {
- if (file.IsEqual(openFile.file)) {
- alreadyOpenedFile = openFile;
- return true;
- }
- return false;
- });
- if (alreadyOpenedFile != null) {
- alreadyOpenedFile.window.activate();
- } else {
- createNewFileViewerWindow(file);
- }
- });
- }
新增的 KnownFolders 属性
Windows 8.1 Preview 引入了两个新 KnownFolders 属性,这允许你在两个其他的位置访问文件:CameraRoll 和 Playlists。
KnownFolders.CameraRoll 属性允许你访问使用设备相机拍摄的图片—这跟现有的 Windows Phone 8 属性相似。KnownFolders.Playlists 属性允许你访问用户的播放列表
文件检索时无错误处理要求
Windows 8.1 Preview 引入的 StorageFolder.TryGetItemAsync 方法允许应用尝试按照名称来检索文件或文件夹,无需在应用代码中添加错误捕捉逻辑。如果找不到文件或文件夹,TryGetItemAsync 返回 null,并不抛出异常。因为该方法返回 null,你也可以使用它来确定是否存在特定的文件或文件夹。
在打开(方式)应用场景中允许查看文件
在 Windows 8.1 Preview 中,你可以使用 NeighboringFilesQuery 属性,浏览激活应用的文件周围的文件。
在 Windows 8 中,使用特定文件关联打开内容的默认应用只能获得一个代表所调用文件的对象。 这对于媒体库应用而言是一个问题,因为用户希望浏览周围的文件。在 Windows 8.1 Preview 中,默认应用可以获得周围 视图中的文件集合—即从中选择所调用文件的集合。
你的应用需要声明特定的库功能,以便获取相应类型的条目。 例如,若要获取 NeighboringFilesQuery 中的图片,应用必须声明“图片库”功能。
本示例显示了如何检索激活应用的文件周围的文件集合。
- function activated(sender, e) {
- if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.file && e.files.size > 0) {
- var invokedFile = e.detail.files[0];
- var neighboringFiles = e.detail.neighboringFilesQuery;
- if (neighboringFiles) {
- result.neighboringFiles.findStartIndexAsync(e.detail.files[0]).done(function (index) {
- var invokedFileElement = document.getElementById("invokedFile");
- invokedFileElement.textContent = "Invoked item: " + invokedFile.name + ", at index " + index + " in view file enumeration.";
- var prevFileslist = document.getElementById("prevFilesList");
- result.neighboringFiles.getFilesAsync(0, index).done(function (fileList) {
- fileList.forEach(function (file) {
- // Create an entry in the list for the file.
- var fileItemElement = document.createElement("li");
- fileItemElement.textContent = file.name;
- prevFileslist.appendChild(listItemElement);
- });
- },
- function (error) {
- // Handle error trying to get list of files.
- });
- var nextFileslist = document.getElementById("nextFilesList");
- result.neighboringFiles.getFilesAsync(index + 1, -1).done(function (fileList) {
- fileList.forEach(function (file) {
- // Create an entry in the list for the file.
- var fileItemElement = document.createElement("li");
- fileItemElement.textContent = file.name;
- nextFileslist.appendChild(listItemElement);
- });
- },
- function (error) {
- // Handle error trying to get list of files.
- });
- },
- function (error) {
- // Handle error trying to get file index.
- });
- }
- }
- }
- app.addEventListener("activated", activated);
#p#
将应用内容添加到 Windows 索引中
在 Windows 8.1 Preview 中,可以直接将应用内容添加到 Windows 索引。将应用内容添加到索引中可以确保在使用 ApplicationIndexedContent 文件夹的查询或使用新增的应用内搜索控件时,快速搜索应用内容。你可以使用 Windows.Storage.Search 中新增的 API 集,或者通过创建 "appcontent-ms" 文件,在索引中添加文件属性和内容。
SkyDrive
在 Windows 8.1 Preview 中,SkyDrive 提供两项全新的功能更新:
- 文件存储
让 SkyDrive 成为用户文档、图片和视频的默认存储位置,可将 SkyDrive 轻松集成到你的应用。只要实例化应用中的 FileSavePicker 或 FileOpenPicker 对象,默认情况下文件选取器就会打开 SkyDrive。但用户必须登录自己的 Microsoft 帐户才能实现此操作。(也可将文件选取器的 SuggestedStartLocation 属性设置到非 SkyDrive 的位置。)
- SkyDrive 存储管理工具
我们改进了 Windows 8.1 Preview 上的 SkyDrive 存储配额管理体验。用户可直接从 Windows 管理 SkyDrive,无需转到 skydrive.com。他们可查看存储使用情况、升级存储计划并回收 SkyDrive 上的空间,完全无需离开 Windows 8.1 Preview 界面。
DDS 图像文件支持
使用 JavaScript 和可扩展应用程序标记语言 (XAML) WebView 控件的 Windows 应用商店应用现在支持 Microsoft DirectDraw 表面 (DDS) 文件格式,从而使你能够创建运行速度更快的 WebGL 应用,这类应用即使是在使用较大纹理的情况下,也能更快速地运行 。
关于块压缩和 DDS
块压缩 (BC) 是一种用于在 DirectDraw 表面 (DDS) 文件中存储像素数据的压缩类。与其他图像文件格式不同,图形处理器 (GPU) 可以直接从块压缩格式中采样,而无需任何解压缩或处理,从而能够改进在 Windows 应用商店应用中加载纹理资源的性能。对于 BC 格式,平均每个像素使用 4-8 位,而对于常规的 RGBA 纹理,每个像素使用 32 位。因此,块压缩格式还能将总 GPU 内存使用量降低多达 87.5%,从而允许在 Windows 应用商店应用中使用大量或较高质量的资产。
尽管有很多块压缩算法,但 Windows 8.1 Preview 上使用 JavaScript 和 XAML WebView 控件的 Windows 应用商店应用在 DDS 文件格式中只支持三种类型的块压缩:BC1、BC2 和 BC3。由于经过块压缩的 DDS 图像几乎不需要任何 CPU 解码时间,因此它的加载速率比 JPEG 图像快得多,同时由于块压缩使用的 GPU 内存较少,你还可以使用更多的纹理资源。经过块压缩的 DDS 文件是适用于内置游戏背景和纹理的理想图像格式。
如何在 DDS 文件中使用块压缩
在使用 JavaScript 或 XAMLWebView 控件的 Windows 应用商店应用中将你的图像资产转换为块压缩格式时,需要考虑以下限制:
- 仅支持与以下 DXGI_FORMAT 枚举值对应的 BC1、BC2 和 BC3 块压缩格式:
- DXGI_FORMAT_BC1_UNORM
- DXGI_FORMAT_BC2_UNORM
- DXGI_FORMAT_BC3_UNORM
- 必须使用预乘 Alpha。支持使用显式定义预乘 Alpha(DXT1、DXT2 和 DXT4)的格式的旧 DDS 文件,以及使用 DDS_HEADER_DX10 结构和有效 DDS_ALPHA_MODE 值(DDS_ALPHA_MODE_OPAQUE 和 DDS_ALPHA_MODE_PREMULTIPLIED)的新 DDS 文件。
- X 和 Y 维度必须是 4 像素的倍数。
- DDS 中不支持立体纹理、立方图、mipmap 或纹理格式。
如果你不遵守这些限制,你的 DDS 文件将无法加载到使用 JavaScript 或 XAML WebView 控件的 Windows 应用商店应用中。有关详细信息,请参阅此链接。
在 DDS 文件中创建块压缩资产后,可以在标记中加载 DDS 文件,或通过 JavaScript 进行加载:
HTML
- <img src=”sample.dds” />
JavaScript
- var img = new Image();
- img.src = “sample.dds”;
何时使用块压缩格式
如上所述,经过块压缩的 DDS 文件可显著增加你能够在 Windows 应用商店应用中使用的较大纹理的数量,并且可以提高应用的加载速度。但是,尽管经过块压缩的 DDS 文件在 GPU 内存使用方面更加高效,而与 JPEG 文件相比,却占用较多的磁盘空间。经过块压缩的 DDS 文件格式不适合通过网络下载,因此最好将这类文件用作应用程序包中的本地资产。尽管在 Internet Explorer 11 Preview 上支持经过块压缩的 DDS 文件,但由于需要较高的网络成本,因此不推荐在 Web 上使用这种格式。
由于块压缩格式会降低质量,因此就像使用其他类似的格式那样,必须确保在转换为块压缩格式时不会降低视觉质量。块压缩对于真实的“自然”图像处理效果非常好,但对于强烈的渐变和色移会出现失真。
原文链接:http://msdn.microsoft.com/zh-cn/library/windows/apps/bg182881.aspx