Ich habe Schwierigkeiten, erweiterte Ausführung Sitzung für meine Windows Universal App zu arbeiten.Ich verstehe, erweiterte Ausführungssitzung in Windows Universal App (UWP)
Was ich versuche zu erreichen, ist das folgende Szenario. Der Benutzer möchte das Telefon über Bluetooth mit einem Gerät verbinden. Derzeit, wenn sich der Bildschirm ausschaltet oder ein eingehender Anruf eingeht oder der Benutzer die App minimiert, schlägt die Verbindung fehl und wir starten sie bei Fortsetzen neu. Ich möchte die erweiterte Ausführung für diese in Bearbeitung befindliche Verbindung aktivieren, sodass die App die Arbeit auch dann fortsetzt, wenn sie minimiert (ausgesetzt) ist.
Ich habe festgestellt, ich brauche die ExtendedExecutionReason.Unspecified
, wie es meiner App erlauben sollte, bis zu 10 Minuten im suspendierten Zustand zu laufen (was mehr als genug für meinen Zweck ist). Allerdings scheint die Verbindung beim Aussetzen immer zu scheitern (und ich werde mit ExtendedExecutionRevokedReason.SystemPolicy
widerrufen, wenn ich versuche, den Status meiner App vom Debugger zu ändern, indem ich das Application Lifecycle-Dropdown von VS verwende). Ich habe alle Batterie- und Hintergrundberechtigungen für meine App aktiviert, aber immer noch nicht gut.
Mein Code ist in etwa wie folgt:
... (on begin connection)
ClearExtendedExcecution();
DisplayRequest dr = new DisplayRequest();
var newSession = new ExtendedExecutionSession
{
Reason = ExtendedExecutionReason.Unspecified,
Description = "Pair device"
};
newSession.Revoked += SessionRevoked;
ExtendedExecutionResult result = await newSession.RequestExtensionAsync();
dr.RequestActive();
try
{
switch (result)
{
case ExtendedExecutionResult.Allowed:
m_extendedExecutionSession = newSession;
// DO WORK HERE
await ConnectDeviceAsync(token);
break;
default:
case ExtendedExecutionResult.Denied:
// fallback to request screen active if extended execution fails, but still do work
newSession.Dispose();
await ConnectDeviceAsync(token);
break;
}
}
finally
{
dr.RequestRelease();
ClearExtendedExcecution();
}
...
private async void SessionRevoked(object sender, ExtendedExecutionRevokedEventArgs args)
{
await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
switch (args.Reason)
{
case ExtendedExecutionRevokedReason.Resumed:
Logger.Debug("Extended execution revoked due to returning to foreground.");
break;
case ExtendedExecutionRevokedReason.SystemPolicy:
Logger.Debug("Extended execution revoked due to system policy.");
break;
}
});
}
private void ClearExtendedExcecution()
{
if (m_extendedExecutionSession == null)
{
return;
}
m_extendedExecutionSession.Revoked -= SessionRevoked;
m_extendedExecutionSession.Dispose();
m_extendedExecutionSession = null;
}
Irgendwelche Tipps, was ich falsch mache, wie genau die erweiterte Ausführungs Session soll verwendet werden, oder, wie der Lebenszyklus der Anwendung zu debuggen (ohne sie Der Systemrichtlinien-Widerruf) würde sehr geschätzt werden. Vielen Dank!
Bitte versuchen Sie die ExtendedExecutionReason.Unter ExtendedExecutionReason.SavingData zu ändern. –