Table of Contents

Session-Verfuegbarkeit und Geraeteunterstuetzung pruefen

Bevor Sie AR starten, pruefen Sie normalerweise zuerst, ob die Session verfuegbar ist und ob das aktuelle Geraet die benoetigten AR-Funktionen unterstuetzt. In diesem Artikel erfahren Sie, wie diese Pruefungen durchgefuehrt werden.

Vor dem Start

Bericht im Startablauf abrufen

Wenn die Session nach dem Assemble direkt gestartet wird, koennen Sie ueber das Ereignis StateChanged den Session-Bericht abrufen.

Abonnieren Sie StateChanged vor dem Start der Session. Das Abonnieren in Awake() ist in der Regel sicher:

void Awake()
{
    Session.StateChanged += HandleSessionStateChange;
}

Auf die Zustande der Session, auf die Sie im Ereignis achten muessen, gehoeren Ready und Broken. Ready bedeutet, dass die Session erfolgreich gestartet wurde und auf dem aktuellen Geraet verfuegbar ist. Broken bedeutet, dass der Start fehlgeschlagen ist und die Session auf dem aktuellen Geraet nicht verfuegbar ist.

Broken tritt nicht immer auf, wenn das Geraet nicht unterstuetzt wird. Deshalb brauchen Sie auch SessionReport.BrokenReason, um den konkreten Fehlergrund zu erhalten.

void HandleSessionStateChange(ARSession.SessionState status)
{
    if (status == ARSession.SessionState.Ready)
    {
        // session ist auf dem aktuellen Geraet verfuegbar
    }
    else if (status == ARSession.SessionState.Broken)
    {
        // session ist auf dem aktuellen Geraet nicht verfuegbar
        if (Session.Report.BrokenReason == SessionReport.SessionBrokenReason.NoAvailabileFrameSource ||
            Session.Report.BrokenReason == SessionReport.SessionBrokenReason.FrameFilterNotAvailabile)
        {
            // die ausgewaehlte Komponente wird vom aktuellen Geraet nicht unterstuetzt
        }
        else
        {
            // geraeteunabhaengiger Grund
        }
    }
}

Wenn SessionReport.SessionBrokenReason.NoAvailabileFrameSource oder SessionReport.SessionBrokenReason.FrameFilterNotAvailabile auftritt, sind Session-Komponenten auf dem aktuellen Geraet nicht verfuegbar. Andere Gruende sind in der Regel geraeteunabhaengig. Genau genommen bedeutet das Auftreten dieser beiden Gruende, dass die aktuelle Konfiguration und nur diese Konfiguration der AR-Funktionen auf diesem Geraet nicht laeuft. Die Konfiguration bezeichnet die in der Session ausgewaehlte Funktion und Einstellung. Einen detaillierten Verfuegbarkeitsbericht erhalten Sie ueber Report.

Falls SessionReport.SessionBrokenReason.NoAvailabileFrameSource auftritt, kann sich die Session moeglicherweise automatisch erholen, wenn beim Starten der Session bei der Online-Aktualisierung der Geraeteliste erkannt wird, dass das Geraet inzwischen unterstuetzt wird.

Bericht vor dem Start abrufen

Wenn Sie vor dem Start der Session entscheiden moechten, ob die Session gestartet werden soll, koennen Sie Assemble() manuell aufrufen und ueber das Ereignis AssembleUpdate einen Bericht zur Verfuegbarkeit der Komponenten abrufen.

Abonnieren Sie AssembleUpdate vor dem Session-Assemble:

Session.AssembleUpdate += OnAssembleUpdate;

In Phase eins des Assemblierens koennen Sie weiterhin ARSession.SessionState und Report verwenden, um die Unterstuetzung der Session zu pruefen. Der Bericht aus Phase zwei wird jedoch nicht in die Session zurueckgeschrieben.

Bei manueller Verwendung von Assemble() sollten Sie daher im Ereignis AssembleUpdate den Verfuegbarkeitsbericht der Komponenten verarbeiten, um zu entscheiden, ob die Session auf dem aktuellen Geraet verfuegbar ist.

Beachten Sie besonders die Verfuegbarkeit der Liste SessionReport.AvailabilityReport.FrameSources. Wenn mindestens eine Frame-Source-Komponente verfuegbar ist, ist der Teil SessionReport.AvailabilityReport.FrameSources auf dem aktuellen Geraet verfuegbar.

Achten Sie ebenfalls auf die Liste SessionReport.AvailabilityReport.FrameFilters. Je nach Assemble-Option kann die Pruefung verlangen, dass alle Frame-Filter verfuegbar sind, oder dass eine beliebige Anzahl verfuegbar ist. In der Standardkonfiguration muessen alle Frame-Filter verfuegbar sein.

Mit der Standardkonfiguration koennen Sie die Verfuegbarkeit der Session-Komponenten auf dem aktuellen Geraet mit folgendem Code pruefen:

void OnAssembleUpdate(SessionReport.AvailabilityReport report)
{
    if (report.FrameSources.Any(f => f.Availability == SessionReport.AvailabilityReport.AvailabilityStatus.Available) &&
        report.FrameFilters.All(f => f.Availability == SessionReport.AvailabilityReport.AvailabilityStatus.Available))
    {
        Session.AssembleUpdate -= OnAssembleUpdate;
        // session-Komponenten sind auf dem aktuellen Geraet verfuegbar, Session kann gestartet werden
        Session.StartSession();
    }
    else
    {
        // session-Komponenten sind auf dem aktuellen Geraet nicht verfuegbar
    }
    if (report.PendingDeviceList.Count <= 0)
    {
        Session.AssembleUpdate -= OnAssembleUpdate;
    }
}

Beachten Sie, dass AssembleUpdate zweimal ausgelost werden kann. Im obigen Beispiel wird das Ereignis nach der Bestaetigung der Verfuegbarkeit abgemeldet.

Diese Methode kann andere Fehler waehrend des Session-Starts nicht beurteilen. Solche Fehler sind jedoch in der Regel geraeteunabhaengig. Falls erforderlich, koennen Sie sie nach dem Start der Session ueber StateChanged zusaetzlich pruefen.

Auswahl, wenn Session-Komponenten nicht verfuegbar sind

In der App-Entwicklung moechten Sie in der Regel moeglichst viele Geraete unterstuetzen. Wenn Session-Komponenten auf dem aktuellen Geraet nicht verfuegbar sind, koennen Sie folgende Wege waehlen:

  • Auf andere AR-Funktionen ausweichen
    Aendern Sie die Session-Komponenten-Konfiguration und waehlen Sie eine vom aktuellen Geraet unterstuetzte AR-Funktion. Siehe Session erstellen, um zu erfahren, wie die Konfiguration geaendert wird.

  • Eine Nicht-AR-Erfahrung anbieten
    Wenn Session-Komponenten nicht verfuegbar sind, koennen Sie eine Erfahrung ohne AR anbieten. Wenn zum Beispiel AR-Navigation in einem Navigationsszenario nicht moeglich ist, ist eine klassische 2D-Navigation sehr hilfreich.

  • Den Benutzer bitten, das Geraet zu wechseln
    In einigen Szenarien verwendet der Benutzer moeglicherweise ein Geraet, das AR-Funktionen nicht unterstuetzt. Dann koennen Sie den Benutzer bitten, das Geraet zu wechseln, um eine bessere Erfahrung zu erhalten.

Bei der Auswahl dieser Wege sollten Sie die konkreten Anforderungen und die Zielgruppe der Anwendung abwaegen. Wenn in einer AR-Anwendung einige Geraete keine AR- oder Ausweichloesung bieten koennen, sollten Sie trotzdem eine gute Benutzerhinweis-Meldung bereitstellen, damit der Benutzer die Einschraenkungen seines Geraets versteht.

Nachste Schritte