6

Ich suche nach einer Möglichkeit zu überprüfen, ob ein Gerät entweder DeviceOrientationEvent oder DeviceMotionEvent unterstützt. Genauer gesagt möchte ich wissen, ob das Gerät wirklich einen Beschleunigungsmesser hat.Erkennung der Bewegungs-/Orientierungsunterstützung des Geräts?

Leider window.DeviceMotionEvent und window.ondevicemotion bzw. window.DeviceOrientationEvent und window.ondeviceorientation existiert, obwohl das Gerät - MacBook Retina - nicht einen Beschleunigungsmesser haben.

Es ist mir klar, dass, wenn das Event nie ausgelöst wird, die Callback-Funktion eines eventlistener auch niemals ausgeführt wird. Aber in meinem Fall muss mein Programm wissen, ob das Gerät über einen Beschleunigungssensor verfügt, da der Benutzer eine Benachrichtigung erhalten sollte, wenn kein Beschleunigungssensor vorhanden ist.

Antworten von diesem Beitrag funktionierte leider nicht für mein Problem.

+0

Ich weiß nicht, wie genau das 'ondevicemotion' Ereignis ist, aber wäre es akzeptabel, auf das Ereignis zu hören, und wenn kein solches Ereignis innerhalb von, sagen wir, 5 Sekunden empfangen wird, ruht das Gerät entweder auf einem Tisch, von jemandem mit einem eisernen Griff gehalten oder hat keinen Beschleunigungsmesser? –

+0

Sie haben Recht. Dies ist ein möglicher Weg, an den ich auch gedacht habe. Diese Lösung hat das Problem, dass ich einige Zeit warten muss (nur ein bisschen, weil 'devicemotion' sehr oft feuert) für die Antwort dieser Prüfung. In meinem Fall muss ich wirklich von Anfang an wissen, ob das Gerät einen Beschleunigungssensor hat, weil der Benutzer zu einer anderen Seite weitergeleitet wird, wenn das Gerät keinen Beschleunigungsmesser hat ... –

Antwort

2

Da Ihr Programm einen Beschleunigungsmesser-Funktionalität Funktion haben, gehe ich davon aus Sie blockieren, seine Ausführung, wenn es keine gibt.

So könnte Ihr Programm standardmäßig "blockieren" und auf ein einzelnes deviceMotionEvent warten, das Ihr gesamtes Programm initialisiert, das letztendlich an window.ondevicemotion bindet. Auf diese Weise müssen Sie die Ausführung nicht mit einem setTimeout blockieren; Ein deviceMotionEvent wird wahrscheinlich ziemlich schnell nach dem Laden des Fensters ausgelöst.

+0

Sehr guter Punkt @Prusprus. Ich denke, das ist die beste Lösung für dieses Problem ... –

Verwandte Themen