Verwalten der Spielübertragung
In diesem Artikel erfahren Sie, wie Sie die Übertragung von Spielen für eine UWP-App verwalten. Benutzer müssen die Übertragung mithilfe der systemspezifischen Benutzeroberfläche initiieren, die in Windows integriert ist. Ab Windows 10, Version 1709, können Apps die Systemübertragungs-UI starten und Benachrichtigungen empfangen, wenn die Übertragung gestartet und beendet wird.
Hinzufügen der Windows-Desktoperweiterungen für die UWP zu Ihrer App
Die APIs für die Verwaltung von App-Übertragungen, die im Windows.Media.AppBroadcasting-Namespace enthalten sind, sind nicht im Vertrag für die universelle API enthalten. Um auf die APIs zuzugreifen, müssen Sie Ihrer App mit den folgenden Schritten einen Verweis auf die Windows-Desktoperweiterungen für die UWP hinzufügen.
- Erweitern Sie in Visual Studio in Projektmappen-Explorer Ihr UWP-Projekt, klicken Sie mit der rechten Maustaste auf "Verweise", und wählen Sie dann "Verweis hinzufügen" aus.
- Erweitern Sie den Universellen Windows-Knoten, und wählen Sie "Erweiterungen" aus.
- Aktivieren Sie in der Liste der Erweiterungen das Kontrollkästchen neben den Windows-Desktoperweiterungen für den UWP-Eintrag , der dem Zielbuild für Ihr Projekt entspricht. Für die App-Übertragungsfeatures muss die Version 1709 oder höher sein.
- Klicken Sie auf OK.
Starten Sie die System-UI, damit der Benutzer die Übertragung initiieren kann.
Es gibt mehrere Gründe, warum Ihre App derzeit nicht übertragen werden kann, z. B. wenn das aktuelle Gerät die Hardwareanforderungen für die Übertragung nicht erfüllt oder eine andere App derzeit übertragen wird. Bevor Sie die System-UI starten, können Sie überprüfen, ob Ihre App derzeit übertragen kann. Überprüfen Sie zunächst, ob die Übertragungs-APIs auf dem aktuellen Gerät verfügbar sind. Die APIs sind auf Geräten mit einer Betriebssystemversion vor Windows 10, Version 1709, nicht verfügbar. Anstatt nach einer bestimmten Betriebssystemversion zu suchen, verwenden Sie die ApiInformation.IsApiContractPresent-Methode, um die Windows.Media.AppBroadcasting.AppBroadcastingContract Version 1.0 abzufragen. Wenn dieser Vertrag vorhanden ist, sind die Übertragungs-APIs auf dem Gerät verfügbar.
Rufen Sie als Nächstes eine Instanz der AppBroadcastingUI-Klasse ab, indem Sie die Factorymethode "GetDefault" auf dem PC aufrufen, wobei jeweils ein einzelner Benutzer angemeldet ist. Rufen Sie auf Der Xbox, bei der mehrere Benutzer angemeldet werden können, stattdessen GetForUser an. Rufen Sie dann GetStatus auf, um den Übertragungsstatus Ihrer App abzurufen.
Die CanStartBroadcast-Eigenschaft der AppBroadcastingStatus-Klasse teilt Ihnen mit, ob die App die Übertragung derzeit starten kann. Wenn nicht, können Sie die Eigenschaft "Details" überprüfen, um zu ermitteln, warum die Übertragung nicht verfügbar ist. Je nach Grund sollten Sie dem Benutzer den Status anzeigen oder Anweisungen zum Aktivieren des Rundfunks anzeigen.
// Verify that the edition supports the AppBroadcasting APIs
if (!Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(
"Windows.Media.AppBroadcasting.AppBroadcastingContract", 1, 0))
{
return;
}
// On PC, call GetDefault because there is a single user signed in.
// On Xbox, call GetForUser instead because multiple users can be signed in.
AppBroadcastingUI^ broadcastingUI = AppBroadcastingUI::GetDefault();
AppBroadcastingStatus^ broadcastingStatus = broadcastingUI->GetStatus();
if (!broadcastingStatus->CanStartBroadcast)
{
AppBroadcastingStatusDetails^ details = broadcastingStatus->Details;
if (details->IsAnyAppBroadcasting)
{
UpdateStatusText("Another app is currently broadcasting.");
return;
}
if (details->IsCaptureResourceUnavailable)
{
UpdateStatusText("The capture resource is currently unavailable.");
return;
}
if (details->IsGameStreamInProgress)
{
UpdateStatusText("A game stream is currently in progress.");
return;
}
if (details->IsGpuConstrained)
{
// Typically, this means that the GPU software does not include an H264 encoder
UpdateStatusText("The GPU does not support broadcasting.");
return;
}
// Broadcasting can only be started when the application's window is the active window.
if (details->IsAppInactive)
{
UpdateStatusText("The app window to be broadcast is not active.");
return;
}
if (details->IsBlockedForApp)
{
UpdateStatusText("Broadcasting is blocked for this app.");
return;
}
if (details->IsDisabledByUser)
{
UpdateStatusText("The user has disabled GameBar in Windows Settings.");
return;
}
if (details->IsDisabledBySystem)
{
UpdateStatusText("Broadcasting is disabled by the system.");
return;
}
return;
}
Fordern Sie an, dass die App Broadcast-UI vom System angezeigt wird, indem Sie ShowBroadcastUI aufrufen.
Hinweis
Die ShowBroadcastUI-Methode stellt eine Anforderung dar, die je nach dem aktuellen Zustand des Systems möglicherweise nicht erfolgreich ist. Ihre App sollte nicht davon ausgehen, dass die Übertragung nach dem Aufrufen dieser Methode begonnen hat. Verwenden Sie das IsCurrentAppBroadcastingChanged-Ereignis , um benachrichtigt zu werden, wenn die Übertragung gestartet oder beendet wird.
broadcastingUI->ShowBroadcastUI();
Empfangen von Benachrichtigungen beim Starten und Beenden von Übertragungen
Registrieren Sie sich für den Empfang von Benachrichtigungen, wenn der Benutzer die Systembenutzeroberfläche zum Starten oder Beenden der Übertragung Ihrer App verwendet, indem Sie eine Instanz der AppBroadcastingMonitor-Klasse initialisieren und einen Handler für das IsCurrentAppBroadcastingChanged-Ereignis registrieren. Wie im vorherigen Abschnitt erläutert, stellen Sie sicher, dass Sie apiInformation.IsApiContractPresent zu einem bestimmten Zeitpunkt verwenden, um zu überprüfen, ob die Übertragungs-APIs auf dem Gerät vorhanden sind, bevor Sie versuchen, sie zu verwenden.
if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(
"Windows.Media.AppBroadcasting.AppBroadcastingContract", 1, 0))
{
m_appBroadcastMonitor = ref new AppBroadcastingMonitor();
m_appBroadcastMonitor->IsCurrentAppBroadcastingChanged +=
ref new TypedEventHandler<AppBroadcastingMonitor^, Platform::Object^>(this, &App::OnIsCurrentAppBroadcastingChanged);
}
Im Handler für das IsCurrentAppBroadcastingChanged-Ereignis sollten Sie die Benutzeroberfläche Ihrer App aktualisieren, um den aktuellen Übertragungsstatus widerzuspiegeln.
void App::OnIsCurrentAppBroadcastingChanged(AppBroadcastingMonitor^ sender, Platform::Object^ args)
{
if (sender->IsCurrentAppBroadcasting)
{
UpdateStatusText("App started broadcasting.");
}
else
{
UpdateStatusText("App stopped broadcasting.");
}
}
Zugehörige Themen