Delen via


Zorg ervoor dat u uw inhoud opnieuw kunt starten via Recall

Recall slaat momentopnamen van uw toepassing automatisch op, maar gebruikers kunnen niet opnieuw starten naar uw inhoud, tenzij u een UserActivity opgeeft op het moment van de momentopname. Hiermee kan Recall de gebruiker terugbrengen naar wat er op dat moment werd gezien.

Een UserActivity verwijst naar iets specifieks waaraan de gebruiker in uw app heeft gewerkt. Wanneer een gebruiker bijvoorbeeld een document schrijft, kan een UserActivity verwijzen naar de specifieke plaats in het document waar de gebruiker het schrijven heeft gelaten. Wanneer u naar een muziek-app luistert, kan de UserActivity de afspeellijst zijn waarnaar de gebruiker het laatst heeft geluisterd. Wanneer een gebruiker op een canvas tekent, zou UserActivity de plek kunnen zijn waar voor het laatst een teken is gemaakt. Kortom, een UserActivity vertegenwoordigt een bestemming in uw Windows-app waarnaar een gebruiker kan terugkeren, zodat ze kunnen hervatten wat ze aan het doen waren.

Gebruikersactiviteiten pushen

Wanneer de hoofdinhoud in uw app wordt gewijzigd (zoals de gebruiker die een andere e-mail opent, een andere webpagina opent, enzovoort), moet uw app een nieuw UserActivitySession logboek vastleggen zodat het systeem weet welke inhoud momenteel is geopend. Recall koppelt vervolgens de meest recente UserActivity aan de momentopname die wordt opgeslagen en gebruikt de ActivationUri binnen de activiteit om de gebruiker terug te laten keren naar die inhoud.

U wordt aangeraden om gebruikersactiviteiten op alle pc's te pushen, zelfs op pc's waarop Recall niet wordt uitgevoerd.

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();
}

Opmerking

De methode GetOrCreateUserActivityAsync retourneert altijd een nieuwe activiteit in de nieuwste versies van Windows. De mogelijkheid om uw eerder opgeslagen activiteiten te krijgen, is verwijderd en Windows slaat de vorige activiteiten van uw app niet meer op op een manier die uw app kan ophalen.

Optioneel: de aangevraagde gebeurtenis verwerken

Naast het pushen van activiteiten, kan uw app ervoor kiezen om de UserActivityRequested gebeurtenis te implementeren, die windows kan activeren om ervoor te zorgen dat deze de meest recente activiteit van uw app heeft.

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();
    }
}