Muszę dodać funkcję wstrząsania, która odświeży moją aplikację na Androida.
Wszystko, co znajduję w dokumentacji, dotyczy implementacji SensorListener
, ale Eclipse mówi mi, że jest przestarzała i sugeruje SensorEventListener
.
Czy ktoś ma fajny przewodnik na temat tego, jak to zrobić shake controller
?
android
accelerometer
shake
Sara
źródło
źródło
Odpowiedzi:
Oto przykładowy kod. Umieść to w swojej klasie aktywności:
I dodaj to do metody onCreate:
Następnie możesz zapytać „mAccel” w dowolnym miejscu w aplikacji o bieżące przyspieszenie, niezależnie od osi i oczyszczone z przyspieszenia statycznego, takiego jak grawitacja. Będzie to ok. 0, jeśli nie ma ruchu, i, powiedzmy> 2, jeśli urządzenie jest wstrząśnięte.
Na podstawie komentarzy - aby to przetestować:
Uwagi:
Akcelometr należy dezaktywować po wstrzymaniu i włączyć po wznowieniu w celu oszczędzania zasobów (procesora, baterii). Kod zakłada, że jesteśmy na Ziemi ;-) i inicjuje przyspieszenie ziemskiej grawitacji. W przeciwnym razie dostaniesz silnego „wstrząsu”, gdy aplikacja się uruchomi i „uderzy” w ziemię po swobodnym spadku. Jednak kod przyzwyczaja się do grawitacji z powodu filtra dolnoprzepustowego i po zainicjowaniu działałby również na innych planetach lub w wolnej przestrzeni. (nigdy nie wiesz, jak długo Twoja aplikacja będzie używana ... ;-)
źródło
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
powinna być ta linia kodumAccel = 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) { ... }
Nazwy metod powinny być prawidłowe (nie mam przy sobie kodu ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
zamiast tego, aby uniknąć konwersjiOto mój kod do wykrywania gestów wstrząsania:
Dodaj to do swojej aktywności:
...
w onCreate () dodaj:
i:
źródło
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
w onCreate (). W przeciwnym razie działa cudownie! Dzięki!Oto kolejna implementacja, która opiera się na niektórych tu wskazówkach, a także na kodzie z witryny dla programistów Androida.
MainActivity.java
ShakeDetector.java
źródło
DoShake()
funkcji?Naprawdę podobała mi się odpowiedź Peterdka. Postanowiłem zrobić kilka poprawek do jego kodu.
plik: ShakeDetector.java
Nie zapominaj również, że musisz zarejestrować instancję ShakeDetector w SensorManager.
źródło
SHAKE_THRESHOLD_GRAVITY
na 1.7F aby zapobiec czytelników od myślenia, że ta odpowiedź nie działa, ponieważ mają wstrząsnąć dość trudne ze względu na zestaw wartości będącej 2.7F .count
zmienna w onShake informuje, ile razy urządzenie zostało wstrząśnięteSystemClock.elapsedRealtime()
zamiastSystem.currentTimeMillis()
i zainicjować mShakeTimestamp tą samą metodą, zamiast z 0Tworzę aplikację do wykrywania ruchu i wstrząsów dla mojego projektu uniwersyteckiego.
Oprócz pierwotnego celu aplikacji dzielę część biblioteki (odpowiedzialną za wykrywanie ruchu i wstrząsów) z aplikacji. Kod jest bezpłatny, dostępny na SourceForge pod nazwą projektu „BenderCatch”. Dokumentacja, którą tworzę, będzie gotowa około połowy września. http://sf.net/projects/bendercatch
Wykorzystuje bardziej precyzyjny sposób wykrywania wstrząsów: obserwuje ZARÓWNO różnicę siły między SensorEvent ORAZ drgania występujące na osi X i Y podczas wykonywania wstrząsu. Może nawet wydawać dźwięk (lub wibrować) przy każdej oscylacji drgania.
Nie krępuj się zapytać mnie o więcej przez e-mail na raffaele [at] terzigno [dot] com
źródło
Napisałem mały przykład do wykrywania wstrząsów pionowych i poziomych i pokazywania
Toast
.źródło
Możesz użyć sejsmiki . Przykład można znaleźć tutaj .
źródło
Wypróbowałem kilka implementacji, ale chciałbym udostępnić własne. To używa
G-force
jako jednostka do obliczenia progu. Ułatwia to zrozumienie, co się dzieje, a także ustawienie dobrego progu.Po prostu rejestruje wzrost siły G i wyzwala słuchacza, jeśli przekroczy on próg. Nie używa żadnych progów kierunku, ponieważ tak naprawdę nie jest to potrzebne, jeśli chcesz tylko zarejestrować dobry shake.
Oczywiście potrzebujesz standardowej rejestracji i rejestracji ONZ tego słuchacza w
Activity
.Ponadto, aby sprawdzić, jakiego progu potrzebujesz, polecam następującą aplikację (nie jestem w żaden sposób połączony z tą aplikacją)
źródło
Oto kolejny kod tego:
źródło
źródło
źródło
Shaker.java
MainActivity.java
Baw się dobrze.
źródło
źródło
Powinieneś subskrybować jako
SensorEventListener
i uzyskaćaccelerometer
dane. Gdy już to zrobisz, powinieneś monitorować nagłą zmianę kierunku (znaku) przyspieszenia na pewnej osi. Byłoby to dobrym wskaźnikiem'shake'
ruchu urządzenia.źródło
Praca ze mną v.good Odniesienie
źródło
Możesz spróbować tinybus open source . Dzięki niemu wykrywanie wstrząsów jest tak proste.
Wykorzystuje sejsmikę do wykrywania wstrząsów.
źródło