主要磁贴 API

注意

生活磁贴是 Windows 10 功能,在更高版本的 Windows 上不受支持。 对于新应用,建议遵循应用图标的当前指南

使用主磁贴 API,可以检查应用当前是否固定到“开始”屏幕,并请求固定应用的主要磁贴。

重要

需要创意者更新:必须面向 SDK 15063 并运行 Windows 10 内部版本 15063 或更高版本才能使用主要磁贴 API。

重要 APIStartScreenManager 类ContainsAppListEntryAsyncRequestAddAppListEntryAsync

何时使用主磁贴 API

你非常努力地为应用的主磁贴设计出色的体验,现在你有机会要求用户将其固定到“开始”。 但在我们深入了解代码之前,在设计体验时,需要牢记以下几点:

  • 使用明确的“固定动态磁贴”调用操作,在 应用中创建一个非破坏性且易于消除的 UX。
  • 在要求用户固定应用之前,请 明确说明应用的动态磁贴的价值。
  • 如果磁贴已固定,或者设备不支持磁贴,请不要要求用户固定应用的磁贴(详细信息如下)。
  • 不要 反复要求用户固定应用的磁贴(他们可能会很恼火)。
  • 切勿在没有显式用户交互的情况下调用固定 API,或者在应用最小化/未打开时调用

检查 API 是否存在

如果你的应用支持较早版本的 Windows 10,则需要检查这些主要磁贴 API 是否可用。 为此,请使用 ApiInformation。 如果主磁贴 API 不可用,请避免执行对 API 的任何调用。

if (ApiInformation.IsTypePresent("Windows.UI.StartScreen.StartScreenManager"))
{
    // Primary tile API's supported!
}
else
{
    // Older version of Windows, no primary tile API's
}

检查“开始”是否支持你的应用

根据当前开始菜单和应用类型,可能不支持将应用固定到当前“开始”屏幕。 例如,IoT 或 xbox 设备不支持固定到“开始”。 因此,在显示任何固定 UI 或执行任何固定代码之前,首先需要检查当前“开始”屏幕是否支持你的应用。 如果不支持,请不要提示用户固定磁贴。

// Get your own app list entry
// (which is always the first app list entry assuming you are not a multi-app package)
AppListEntry entry = (await Package.Current.GetAppListEntriesAsync())[0];

// Check if Start supports your app
bool isSupported = StartScreenManager.GetDefault().SupportsAppListEntry(entry);

检查当前是否已固定

若要确定主磁贴当前是否已固定到 Start,请使用 ContainsAppListEntryAsync 方法。

// Get your own app list entry
AppListEntry entry = (await Package.Current.GetAppListEntriesAsync())[0];

// Check if your app is currently pinned
bool isPinned = await StartScreenManager.GetDefault().ContainsAppListEntryAsync(entry);

固定主磁贴

如果主磁贴当前未固定,并且你的磁贴受“开始”支持,你可能希望向用户显示一个提示,说明他们可以固定主磁贴。

注意

当应用位于前台时,必须从 UI 线程调用此 API,并且只有在用户有意请求固定主磁贴之后(例如,在用户单击“是”以提示固定磁贴后)才调用此 API。

如果用户单击按钮来固定主磁贴,则调用 RequestAddAppListEntryAsync 方法以请求将磁贴固定到 Start。 这将显示一个对话框,要求用户确认他们希望将磁贴固定到“开始”。

这将返回一个布尔值,表示磁贴现在是否固定到“开始”。 如果磁贴已固定,则会立即返回 true ,而不会向用户显示对话框。 如果用户在对话框中单击“否”,或将磁贴固定到“开始”不受支持,则返回 false。 否则,用户单击了“是”,并固定了磁贴,API 将返回 true

// Get your own app list entry
AppListEntry entry = (await Package.Current.GetAppListEntriesAsync())[0];

// And pin it to Start
bool isPinned = await StartScreenManager.GetDefault().RequestAddAppListEntryAsync(entry);

资源