На устройстве Android (Kotlin) я хочу определять, когда пользователь «колет» или «колет» телефон - он держит его в руке и быстро перемещает устройство в одном направлении. .
Когда пользователь заканчивает свой джеб в воздухе, я хочу получить уведомление с помощью обратного вызова о том, был ли это сильный или слабый джеб (сильный или слабый джеб настраивается и не ограничивается только сильным или слабый - может это процент, где 100% безумно огромный джеб). См., Например, код ниже.
Мой текущий код (Kotlin) обнаруживает удар в любом направлении, однако, когда телефон возвращается в исходное стационарное положение, он также определяет это движение как удар (что для меча нехорошо - я не хочу убивать себя!).
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type === Sensor.TYPE_ACCELEROMETER) {
mGravity = event.values.clone()
val x: Float = mGravity[0]
val y: Float = mGravity[1]
val z: Float = mGravity[2]
mAccelLast = mAccelCurrent
mAccelCurrent = Math.sqrt(x * x + y * y + (z * z).toDouble()).toFloat()
val delta: Float = mAccelCurrent - mAccelLast
mAccel = mAccel * 0.9f + delta
if (mAccel > 3) {
Log.d(TAG, "onLargeMovement")
onLargeMovement()
} else if (mAccel > 1.5) {
Log.d(TAG, "onMediumMovement")
onMediumMovement()
} else if (mAccel > 0.5) {
Log.d(TAG, "onSmallMovement")
onSmallMovement()
}
}
}
Как я могу sh это сделать?