Frage

Ich versuche, eine Hintergrundaufgabe zu registrieren, und es kommt zu einem seltsamen Verhalten.Mir scheint, dass die Aufgabe selbst zum richtigen Zeitpunkt registriert und ausgelöst wird.Wenn es jedoch ausgelöst wird, wird mein Programm geschlossen (ohne Fehler).

Ich vermute, dass der Grund darin liegt, dass das Programm mich nicht fragt, ob ich die Ausführung einer Hintergrundaufgabe zulassen möchte, wenn ich es starte.Ich habe eine Deklaration für die Hintergrundaufgabe als Systemereignis erstellt und registriere mich wie folgt aus 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();

Daher glaube ich, dass meine Frage lautet:Warum sollte es mich nicht um Erlaubnis bitten, eine Hintergrundaufgabe auszuführen (was mir vermutlich die Antwort auf mein Hauptproblem geben wird, warum es abstürzt)?

Ich bin mir nicht sicher, ob es wichtig ist, aber dies ist eine Windows Universal-App (die app.xaml.cs oben befindet sich in der Shared Projekt.

Die Aufgabe sieht so aus:

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();
War es hilfreich?

Lösung

Du hast gefragt: Warum sollte ich nicht um Erlaubnis gebeten werden, eine Hintergrundaufgabe auszuführen?

Die Antwort lautet: Sofern Ihre Hintergrundaufgabe keinen Zugriff auf den Sperrbildschirm erfordert, ist für die Registrierung nicht die Erlaubnis des Benutzers erforderlich.Es gibt konstruktionsbedingt keine Benutzeraufforderung.Eine der Absichten dieses Entwurfs besteht darin, dass Sie eine Aufgabe von einer anderen Aufgabe registrieren können.

Unter Windows ist kein Anruf erforderlich BackgroundExecutionManager.RequestAccessAsync() mit Ausnahme des Zugriffs auf den Sperrbildschirm.Wenn Sie es aufrufen, erhalten Sie mehr Kontingent, müssen jedoch die Aufgabe vom Benutzer genehmigen.

In Windows Phone anrufen RequestAccessAsync() ist auf jeden Fall erforderlich, fordert den Benutzer jedoch nie zu einer Benutzeroberfläche auf.Aus diesem Grund kann die Logik in Ihrer Universal-App geteilt werden, wird aber wahrscheinlich über eine gemeinsame Nutzung verfügen #if die Registrierung ggf. anders abzuwickeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top