Saya perlu menambahkan fitur shake yang akan menyegarkan aplikasi Android saya.
Semua yang saya temukan dari dokumentasi melibatkan implementasi SensorListener
, tetapi Eclipse mengatakan kepada saya bahwa itu sudah usang dan disarankan SensorEventListener
.
Adakah yang memiliki panduan bagus tentang bagaimana cara membuat ini shake controller
?
android
accelerometer
shake
Sara
sumber
sumber
Jawaban:
Berikut ini contoh kode. Masukkan ini ke dalam kelas aktivitas Anda:
Dan tambahkan ini ke metode onCreate Anda:
Anda kemudian dapat bertanya "mAccel" di mana pun yang Anda inginkan dalam aplikasi Anda untuk akselerasi saat ini, terlepas dari sumbu dan dibersihkan dari akselerasi statis seperti gravitasi. Itu akan menjadi sekitar. 0 jika tidak ada gerakan, dan, katakanlah> 2 jika perangkat diguncang.
Berdasarkan komentar - untuk menguji ini:
Catatan:
Accelometer harus dinonaktifkan pada Jeda dan diaktifkan pada Resume untuk menghemat sumber daya (CPU, Baterai). Kode ini mengasumsikan kita berada di planet Bumi ;-) dan menginisialisasi percepatan gravitasi bumi. Kalau tidak, Anda akan mendapatkan "guncangan" yang kuat ketika aplikasi dimulai dan "menyentuh" tanah dari jatuh bebas. Namun, kode tersebut akan terbiasa dengan gravitasi karena filter berpotongan rendah dan akan bekerja juga di planet lain atau di ruang kosong, setelah diinisialisasi. (Anda tidak pernah tahu berapa lama aplikasi Anda akan digunakan ... ;-)
sumber
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
seharusnya baris kode inimAccel = 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) { ... }
Nama metode harus benar (saya tidak memiliki kode dengan saya ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
alih-alih menghindari konversiBerikut adalah kode saya untuk deteksi isyarat goyang:
Tambahkan ini dalam aktivitas Anda:
...
di onCreate () tambahkan:
dan:
sumber
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
di onCreate (). Kalau tidak, bekerja luar biasa! Terima kasih!Berikut ini adalah implementasi lain yang dibangun berdasarkan beberapa tips di sini serta kode dari situs pengembang Android.
MainActivity.java
ShakeDetector.java
sumber
DoShake()
fungsinya?Saya sangat menyukai jawaban Peterdk. Saya mengambilnya sendiri untuk membuat coulpe tweak untuk kode-nya.
file: ShakeDetector.java
Juga, jangan lupa bahwa Anda harus mendaftarkan instance ShakeDetector dengan SensorManager.
sumber
SHAKE_THRESHOLD_GRAVITY
ke 1.7F untuk mencegah pembaca dari berpikir bahwa jawaban ini tidak berfungsi karena mereka harus mengguncang cukup keras karena nilai yang ditetapkan menjadi 2.7F .count
variabel dalam onShake memberitahu Anda berapa kali perangkat terguncangSystemClock.elapsedRealtime()
daripadaSystem.currentTimeMillis()
menginisialisasi mShakeTimestamp dengan metode yang sama dan bukan dengan 0Saya sedang mengembangkan aplikasi pendeteksi gerakan dan deteksi goyang untuk proyek universitas saya.
Selain target asli aplikasi, saya membelah bagian perpustakaan (bertanggung jawab untuk deteksi gerak dan goyang) dari aplikasi. Kode ini gratis, tersedia di SourceForge dengan nama proyek "BenderCatch". Dokumentasi yang saya produksi akan siap sekitar pertengahan september. http://sf.net/projects/bendercatch
Ini menggunakan cara yang lebih tepat untuk mendeteksi shake: menonton KEDUA perbedaan kekuatan antara SensorEvents DAN osilasi hadir dalam sumbu X dan Y ketika Anda melakukan shake. Ia bahkan bisa mengeluarkan suara (atau bergetar) pada setiap osilasi dari goyang.
Jangan ragu untuk bertanya lebih banyak kepada saya melalui email di raffaele [at] terzigno [dot] com
sumber
Saya telah menulis contoh kecil untuk mendeteksi getar vertikal dan horizontal dan memperlihatkan a
Toast
.sumber
Anda bisa menggunakan seismik . Contohnya dapat ditemukan di sini .
sumber
Saya telah mencoba beberapa implementasi, tetapi ingin membagikan sendiri. Ini digunakan
G-force
sebagai unit untuk perhitungan ambang batas. Itu membuatnya sedikit lebih mudah untuk memahami apa yang sedang terjadi, dan juga dengan menetapkan ambang batas yang baik.Ini hanya mendaftar peningkatan kekuatan G dan memicu pendengar jika melebihi ambang batas. Itu tidak menggunakan ambang batas arah, karena Anda tidak benar-benar membutuhkannya jika Anda hanya ingin mendaftarkan goyangan yang baik.
Tentu saja Anda memerlukan pendaftaran standar dan pendaftaran UN pendengar ini di Internet
Activity
.Juga, untuk memeriksa ambang batas yang Anda butuhkan, saya merekomendasikan aplikasi berikut (saya tidak terhubung dengan cara itu)
sumber
Berikut ini kode lain untuk ini:
sumber
sumber
sumber
Shaker.java
MainActivity.java
Selamat bersenang-senang.
sumber
sumber
Anda harus berlangganan sebagai
SensorEventListener
, dan mendapatkanaccelerometer
data. Setelah Anda memilikinya, Anda harus memantau perubahan arah (tanda) akselerasi pada sumbu tertentu. Ini akan menjadi indikasi yang baik untuk'shake'
pergerakan perangkat.sumber
Bekerja dengan saya v. Referensi yang Baik
sumber
Anda mungkin ingin mencoba tinybus sumber terbuka . Dengan itu deteksi goyang semudah ini.
Ini menggunakan seismik untuk deteksi goyang.
sumber