Condividi tramite


Abilitare il riavvio del contenuto da Recall

Recall salva automaticamente gli snapshot dell'applicazione, tuttavia, gli utenti non saranno in grado di riavviare il contenuto a meno che non si fornisca un elemento UserActivity al momento dello snapshot. Questo consente a Recall di riportare l'utente a ciò che stava vedendo in quel momento.

Un userActivity fa riferimento a un elemento specifico su cui l'utente stava lavorando all'interno dell'app. Ad esempio, quando un utente scrive un documento, un UserActivity oggetto può fare riferimento alla posizione specifica nel documento in cui l'utente ha interrotto la scrittura. Quando si ascolta un'app musicale, l'oggetto UserActivity potrebbe essere la playlist a cui l'utente ha ascoltato l'ultima volta. Quando si disegna su un'area di disegno, l'oggetto può essere il UserActivity punto in cui l'utente ha effettuato l'ultimo segno. In sintesi, un oggetto UserActivity rappresenta una destinazione all'interno dell'app di Windows a cui un utente può tornare in modo da poter riprendere le operazioni eseguite.

Trasferimento delle attività dell'utente

Ogni volta che il contenuto principale dell'app cambia (ad esempio l'utente che apre un messaggio di posta elettronica diverso, apre una pagina Web diversa e così via), l'app deve registrare un nuovo UserActivitySession elemento in modo che il sistema sappia quale contenuto è attualmente aperto. Recall associa quindi l'elemento più recente UserActivity allo snapshot salvato e userà l'oggetto ActivationUri all'interno dell'attività per consentire all'utente di riavviare il contenuto.

Consigliamo di trasmettere le attività degli utenti su tutti i PC, anche quelli che non eseguono 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();
}

Annotazioni

Il metodo GetOrCreateUserActivityAsync restituirà sempre una nuova attività nelle versioni più recenti di Windows. La possibilità di ottenere le attività salvate in precedenza è stata rimossa e Windows non archivia più le attività precedenti dell'app in modo che l'app possa recuperarle.

Facoltativo: gestione dell'evento richiesto

Oltre all'invio di attività, l'app può scegliere di implementare l'evento UserActivityRequested, che Windows può attivare per assicurarsi di avere l'attività più recente dalla tua app.

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