Поделиться через


Включение повторного запуска содержимого из Recall

Recall Автоматически сохраняет моментальные снимки вашего приложения, однако пользователи не смогут повторно запустить содержимое, если вы не предоставите UserActivity во время создания моментального снимка. Это позволяет Recall вернуть пользователя к тому, что он видел в то время.

UserActivity ссылается на то, что пользователь работал в приложении. Например, когда пользователь пишет документ, может ссылаться на конкретное место в документе, UserActivity где пользователь оставил запись. При прослушивании музыкального приложения может быть список воспроизведения, UserActivity который пользователь последний раз прослушивал. При рисовании на холсте может быть место, UserActivity где пользователь последний раз сделал отметку. В итоге объект UserActivity представляет место назначения в приложении Windows, к которому пользователь может вернуться, чтобы он смог возобновить работу.

Продвижение действий пользователей

Всякий раз, когда основное содержимое приложения изменяется (например, пользователь открывает другую электронную почту, открывая другую веб-страницу и т. д.), приложение должно регистрировать новое UserActivitySession , чтобы система знала, какое содержимое в настоящее время открыто. Recall затем связывает последний UserActivity с сохраненным моментальным снимком и будет использовать ActivationUri внутри действия, чтобы разрешить пользователю повторно запустить это содержимое.

Рекомендуем отправлять действия пользователей на всех компьютерах, даже на тех, где не установлено Recall.

UserActivitySession _previousSession;

private async Task OnContentChangedAsync()
{
    // Dispose of any previous session (which automatically logs the end of the interaction with that content)
    _previousSession?.Dispose();

    // Generate an identifier that uniquely maps to your new content.
    string id = "doc135.txt";

    // Create a new user activity that represents your new content
    var activity = await UserActivityChannel.GetDefault().GetOrCreateUserActivityAsync(id);

    // Populate the required properties
    activity.DisplayText = "doc135.txt";
    activity.ActivationUri = new Uri("my-app://docs/doc135.txt");

    // Save the activity
    await activity.SaveAsync();

    // And start a new session tracking the engagement with this new activity
    _previousSession = activity.CreateSession();
}

Замечание

Метод GetOrCreateUserActivityAsync всегда возвращает новое действие в последних версиях Windows. Возможность получения ранее сохраненных действий была удалена, и Windows больше не сохраняет предыдущие действия вашего приложения таким образом, чтобы ваше приложение могло получить их.

Опционально: Обработка события по запросу

В дополнение к отправке действий, ваше приложение может выбрать реализовать событие UserActivityRequested, которое Windows может запустить, чтобы убедиться, что у него есть последние данные о действиях вашего приложения.

public void OnLaunched()
{
    UserActivityRequestManager.GetForCurrentView().UserActivityRequested += UserActivityRequested;
}

private async void UserActivityRequested(
    Windows.ApplicationModel.UserActivities.UserActivityRequestManager sender,
    Windows.ApplicationModel.UserActivities.UserActivityRequestedEventArgs args)
{
    // Start a deferral so you can use async code
    var deferral = args.GetDeferral();

    try
    {
        // Generate an identifier that uniquely maps to your current content.
        string id = "doc135.txt";

        // Create a user activity that represents your current content
        var activity = await UserActivityChannel.GetDefault().GetOrCreateUserActivityAsync(id);

        // Populate the required properties
        activity.DisplayText = "doc135.txt";
        activity.ActivationUri = new Uri("my-app://docs/doc135.txt");

        // And return the activity to the event handler
        args.Request.SetUserActivity(activity);
    }

    finally
    {
        // And complete the deferral
        deferral.Complete();
    }
}