Domanda

Sto cercando di registrare un compito di sfondo e sto ottenendo un comportamento strano.Sembra che il compito stesso si stia registrando e sparando al momento giusto;Tuttavia, quando si accende che sta chiudendo il mio programma (senza errori).

Sospetto che il motivo sia collegato al fatto che il programma non mi chiede è che voglio consentire a un compito di sfondo di funzionare quando lancio.Ho creato una dichiarazione per il compito di sfondo come evento di sistema, e sto registrando in questo modo dall'app.xaml.cs:

var builder = new BackgroundTaskBuilder();

builder.Name = "NewTask";
builder.TaskEntryPoint = "ConnectionMonitor.CheckInternet";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));

BackgroundTaskRegistration task = builder.Register();
.

Allora, credo che la mia domanda sia: perché non vorrebbe chiedere il permesso di eseguire un compito di sfondo (che presumo darmi la risposta al mio problema principale del perché è schiantato)?

Non sono sicuro che sia importante, ma questa è un'app per Windows Universal (l'app.Xaml.cs sopra è nel progetto Shared.

L'attività è simile a questa:

BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

bool newConnected = IsConnected();
if (connected != newConnected)
{
    connected = newConnected;
    var notifier = ToastNotificationManager.CreateToastNotifier();
    var template = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    var element = template.GetElementsByTagName("text")[0];
    element.AppendChild(template.CreateTextNode(connected ? "Connection available" : "Connection lost"));

    var toast = new ToastNotification(template);
    notifier.Show(toast);  
}

_deferral.Complete();
.

È stato utile?

Soluzione

Hai chiesto: Perché non vorrebbe chiedere il permesso di eseguire un compito di sfondo?

La risposta è, a meno che il tuo attività di background non richieda l'accesso alla schermata di blocco, non richiede la registrazione dell'autorizzazione dell'utente.Non esiste un prompt utente, in base al design.Uno degli intenti di questo design è che consente di registrare un'attività da un'altra attività.

In Windows, non è necessario chiamare BackgroundExecutionManager.RequestAccessAsync() ad eccezione dell'accesso dello schermo di blocco.Chiamata ti darà più quota ma richiederà all'utente di approvare l'attività.

In Windows Phone, è necessario chiamare RequestAccessAsync(), non importa cosa, ma non richiede mai l'utente con un UI.Per questo motivo la logica nella tua app universale può essere condivisa ma probabilmente avrà un #if per gestire la registrazione in modo diverso, se pertinente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top