Ich muss eine Shake-Funktion hinzufügen, die meine Android-Anwendung aktualisiert.
Alles, was ich an Dokumentation finde, ist die Implementierung von SensorListener
, aber Eclipse sagt mir, dass es veraltet ist und schlägt vor SensorEventListener
.
Hat jemand eine nette Anleitung, wie ich das mache shake controller
?
android
accelerometer
shake
Sara
quelle
quelle
Antworten:
Hier ist ein Beispielcode. Fügen Sie dies in Ihre Aktivitätsklasse ein:
Und fügen Sie dies Ihrer onCreate-Methode hinzu:
Sie können dann "mAccel", wo immer Sie möchten, in Ihrer Anwendung nach der aktuellen Beschleunigung fragen, unabhängig von der Achse und gereinigt von statischer Beschleunigung wie Schwerkraft. Es wird ca. sein. 0, wenn keine Bewegung stattfindet, und sagen wir> 2, wenn das Gerät geschüttelt wird.
Basierend auf den Kommentaren - um dies zu testen:
Anmerkungen:
Das Beschleunigungsmesser sollte in der Pause deaktiviert und in der Wiederaufnahme aktiviert werden , um Ressourcen (CPU, Batterie) zu sparen. Der Code geht davon aus, dass wir uns auf dem Planeten Erde befinden ;-) und initialisiert die Beschleunigung auf die Erdgravitation. Andernfalls würden Sie ein starkes "Schütteln" bekommen, wenn die Anwendung startet und vom freien Fall auf den Boden "trifft". Der Code gewöhnt sich jedoch aufgrund des Low-Cut-Filters an die Gravitation und funktioniert nach seiner Initialisierung auch auf anderen Planeten oder im freien Raum. (Sie wissen nie, wie lange Ihre Anwendung verwendet wird ... ;-)
quelle
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
seinmAccel = mAccel * 0.9f + delta * 0.1f; // perform low-cut filter
?Calendar last = Calendar.getInstance(); Calendar now = Calendar.getInstance(); last.setTime(last_date); now.setTime(new Date()); long diff = now.getTimeInMillis() - last.getTimeInMillis(); if(diff >= 750) { ... }
Methodennamen sollten korrekt sein (ich habe den Code nicht dabei ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
stattdessen eine Konvertierung zu vermeidenHier ist mein Code zur Erkennung von Schüttelgesten:
Fügen Sie dies in Ihre Aktivität ein:
...
in onCreate () hinzufügen:
und:
quelle
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
in onCreate (). Ansonsten funktioniert wunderbar! Vielen Dank!Hier ist noch eine weitere Implementierung, die auf einigen der hier aufgeführten Tipps sowie dem Code von der Android-Entwicklerseite aufbaut.
MainActivity.java
ShakeDetector.java
quelle
DoShake()
Funktion?Peterdks Antwort hat mir sehr gut gefallen. Ich habe es auf mich genommen, einige Änderungen an seinem Code vorzunehmen.
Datei: ShakeDetector.java
Vergessen Sie auch nicht, dass Sie eine Instanz des ShakeDetector beim SensorManager registrieren müssen.
quelle
SHAKE_THRESHOLD_GRAVITY
zu 1,7F wechseln , um zu verhindern, dass die Leser denken, dass diese Antwort nicht funktioniert, da sie aufgrund des eingestellten Werts von 2,7F ziemlich stark zittern müssen .count
Variable in onShake gibt an, wie oft das Gerät geschüttelt wurdeSystemClock.elapsedRealtime()
alsSystem.currentTimeMillis()
und mit derselben Methode initialisieren als mit 0Ich entwickle eine Bewegungserkennungs- und Verwacklungserkennungs-App für mein Universitätsprojekt.
Neben dem ursprünglichen Ziel der Anwendung trenne ich den Bibliotheksteil (verantwortlich für die Bewegungs- und Verwacklungserkennung) von der App. Der Code ist kostenlos und auf SourceForge unter dem Projektnamen "BenderCatch" verfügbar. Die Dokumentation, die ich produziere, wird Mitte September fertig sein. http://sf.net/projects/bendercatch
Es verwendet eine präzisere Methode zum Erkennen von Verwacklungen: Beobachten Sie sowohl den Kraftunterschied zwischen SensorEvents als auch die Schwingungen in der X- und Y-Achse, wenn Sie ein Verwackeln durchführen. Es kann sogar bei jeder Schwingung des Schüttelns ein Geräusch (oder Vibrieren) erzeugen.
Fragen Sie mich gerne per E-Mail unter raffaele [at] terzigno [dot] com
quelle
Ich habe ein kleines Beispiel geschrieben, um vertikale und horizontale Erschütterungen zu erkennen und a zu zeigen
Toast
.quelle
Sie können seismische verwenden . Ein Beispiel finden Sie hier .
quelle
Ich habe mehrere Implementierungen ausprobiert, möchte aber meine eigenen teilen. Es wird
G-force
als Einheit für die Schwellenwertberechnung verwendet. Es macht es ein bisschen einfacher zu verstehen, was los ist, und auch einen guten Schwellenwert festzulegen.Es registriert einfach einen Anstieg der G-Kraft und löst den Hörer aus, wenn er den Schwellenwert überschreitet. Es werden keine Richtungsschwellen verwendet, da Sie diese nicht wirklich benötigen, wenn Sie nur einen guten Shake registrieren möchten.
Natürlich benötigen Sie die Standardregistrierung und UN-Registrierung dieses Listeners in der
Activity
.Um zu überprüfen, welchen Schwellenwert Sie benötigen, empfehle ich die folgende App (ich bin in keiner Weise mit dieser App verbunden).
quelle
Hier ist ein weiterer Code dafür:
quelle
quelle
quelle
Shaker.java
MainActivity.java
Habe Spaß.
quelle
quelle
Sie sollten als abonnieren
SensorEventListener
und dieaccelerometer
Daten erhalten. Sobald Sie es haben, sollten Sie auf plötzliche Änderung der Richtung (Vorzeichen) der Beschleunigung auf einer bestimmten Achse überwachen. Dies wäre ein guter Hinweis für die'shake'
Bewegung des Geräts.quelle
Arbeiten mit mir v.good Reference
quelle
Vielleicht möchten Sie Open Source tinybus ausprobieren . Damit ist die Erschütterungserkennung so einfach.
Es verwendet Erdbeben zur Erkennung von Erschütterungen.
quelle