2016-11-24 2 views
1

Ich möchte meine aktuelle UWP-App um eine Hintergrundaufgabe erweitern. Die in-process model passt perfekt zu meinen Bedürfnissen, da ich nicht viel von der Anwendung ändern muss, um Hintergrundaufgaben zu verwenden. Es gibt jedoch ein Problem. Die minimale SDK-Version ist momentan auf 10586 festgelegt, die prozessinternen Hintergrundaufgaben sind jedoch nur für die SDK-Version 14393 und höher verfügbar.Verwenden Sie prozessinterne Hintergrundaufgaben mit der SDK-Version 10586

Normalerweise würde ich eine 'normale' if-Klausel verwenden, um zu überprüfen, ob das Feature unter Verwendung des Windows.Foundation.Metadata.ApiInformation Namespace unterstützt wird. Leider, wie ich die OnBackgroundActivated Methode überschreibe, ist dies nicht möglich. Ich möchte ehrlich gesagt nicht die Unterstützung von 10586 aufgeben, zumindest nicht in diesem Moment.

Gibt es eine einfache Möglichkeit, In-Process-Hintergrundaufgaben zu registrieren, während die Unterstützung für 10586 erhalten bleibt?

EDIT: Wie ich in einem (jetzt gelöschten) Kommentar gefragt wurde: Nein, ich habe die App auf Build 10586 noch nicht ausgeführt, da meine Internetverbindung verdammt langsam ist. Ich frage, weil Visual Studio die App nicht erstellen wird, wenn ich die Zielversion auf 10586 setze.

+0

Kann Ihre App ohne eine Aufgabe auf der älteren Version funktionieren? Die einfache Lösung besteht darin, nur eine Out-of-Process-Task zu verwenden. Keine so große Sache. –

+0

Es kann. Allerdings würde dies eine Menge Umgestaltung erfordern, da ich Anmeldeinformationen/Einstellungen in einer Nur-Text-Datei speichern muss, um von außen darauf zugreifen zu können. –

Antwort

1

Die OnBackgroundActivated Methode, die Sie überschreiben, ist hier nicht das Problem, da auf 10586 es nie aufgerufen wird. Um das Projekt für beide Versionen in den Eigenschaften Ihres Projekts zu erstellen legen Sie die Zielversionen wie folgt aus: Target versions in Applications tab

Was einige Probleme verursachen ruft BackgroundExecutionManager.RequestAccessAsync();. Dieser Methodenaufruf, der bei 10586 verwendet wird, erwartet, dass Sie in Ihrem Package.appxmanifest eine BackgroundTask definiert haben, die in Ihrem Fall nicht erforderlich ist, da es gemäß documentation nicht erforderlich ist. Also, um den Code zu ändern, um Ihre Methode zur Wiederverwendung Ihre in-Prozess Background um so etwas wie diese Registrierung:

public static async Task<bool> RegisterInProcessBackgroundTask(string taskName, uint time = 30) { 
    try { 
     await BackgroundExecutionManager.RequestAccessAsync(); 

     BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder(); 
     taskBuilder.Name = taskName; 
     taskBuilder.SetTrigger(new TimeTrigger(time, false)); 
     BackgroundTaskRegistration registration = taskBuilder.Register(); 

     return true; 
    } catch { 
     return false; 
    } 
} 

Dies wird auf 14393+ arbeiten und zurück true weil die Aufgabe erfolgreich registriert wurde und das Rück false nachdem die Ausnahme Fang weil diese Art von Aufgabe auf 10586 nicht unterstützt wird.

Verwandte Themen