重要的应用程序接口(API)
通过将文件添加到应用最近使用的列表(MRU),跟踪用户经常访问的文件。 该平台根据上次访问项的时间对项目进行排序,并在达到列表的 25 项限制时删除最旧的项,从而为你管理 MRU。 所有应用都有自己的 MRU。
应用的 MRU 由 StorageItemMostRecentlyUsedList 类表示,该类可以通过静态属性 StorageApplicationPermissions.MostRecentlyUsedList 获取。 MRU 项存储为 IStorageItem 对象,因此可以将 StorageFile 对象(表示文件)和 StorageFolder 对象(表示文件夹)添加到 MRU。
先决条件
了解通用 Windows 平台(UWP)应用的异步编程
了解如何在 C# 或 Visual Basic 中编写异步应用,请参阅 在 C# 或 Visual Basic 中调用异步 API。 若要了解如何在C++中编写异步应用,请参阅C++中的
异步编程。 对位置 的访问权限
请参阅 文件访问权限。
-
选取的文件通常是用户反复返回的相同文件。
将选取的文件添加到 MRU
用户选取的文件通常是他们反复返回的文件。 因此,请考虑在选取文件后立即将其添加到应用的 MRU 中。 操作方法如下。
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); var mru = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList; string mruToken = mru.Add(file, "profile pic");
StorageItemMostRecentlyUsedList.Add 重载。 在本示例中,我们使用 Add(IStorageItem,String), 以便我们可以将元数据与文件相关联。 通过设置元数据,可以记录项的目的,例如“个人资料图片”。 还可以通过调用 Add(IStorageItem)将文件添加到 MRU,而无需元数据。 将项添加到 MRU 时,该方法将返回唯一标识的字符串,称为令牌,用于检索项。
小窍门
需要令牌才能从 MRU 检索项目,因此请将其保存在某个位置。 有关应用数据的详细信息,请参阅 管理应用程序数据。
使用令牌从 MRU 检索项
使用最适合要检索的项的检索方法。
- 使用 GetFileAsync以 StorageFile 的形式检索文件。
- 以StorageFolder 的形式使用 GetFolderAsync检索文件夹。
- 检索泛型 IStorageItem,该项可以表示文件或文件夹,并可通过 GetItemAsync获取。
下面介绍如何恢复刚刚添加的文件。
StorageFile retrievedFile = await mru.GetFileAsync(mruToken);
下面介绍如何迭代所有条目以先获取令牌然后获取项。
foreach (Windows.Storage.AccessCache.AccessListEntry entry in mru.Entries)
{
string mruToken = entry.Token;
string mruMetadata = entry.Metadata;
Windows.Storage.IStorageItem item = await mru.GetItemAsync(mruToken);
// The type of item will tell you whether it's a file or a folder.
}
AccessListEntryView 允许循环访问 MRU 中的条目。 这些条目是包含项的令牌和元数据的 AccessListEntry 结构。
在 MRU 已满的时候,从 MRU 中删除项
达到 MRU 的 25 项限制并尝试添加新项时,将自动删除访问时间最长的项目。 因此,您在添加新项目之前,永远不需要删除现有项目。
未来访问列表
此外,你的应用还有一个未来访问列表。 通过选取文件和文件夹,用户授予应用访问可能不可访问的项目的权限。 如果将这些项目添加到将来的访问列表,则当你的应用以后想要再次访问这些项目时,你将保留该权限。 应用的未来访问列表由 StorageItemAccessList 类表示,该类是从静态 StorageApplicationPermissions.FutureAccessList 属性获取的。
当用户选取某个项时,请考虑将其添加到未来访问列表以及 MRU。
- FutureAccessList 最多可以容纳 1000 个项目。 请记住:它可以保存文件夹和文件,因此有很多文件夹。
- 该平台永远不会替你从 FutureAccessList 中删除项。 达到 1000 项限制时,在使用 Remove 方法腾出空间之前,不能再添加其他项。