[Android] android 흔들때 event 주기

이아름·2022년 10월 24일
0

안드로이드

목록 보기
12/13
post-thumbnail

android에서 흔드는지를 확인하기 위해서는 accelerometer(가속도) 센서를 사용해야 합니다.
저 같은 경우에는 이전 x,y,z 값를 저장해두고 이전 값과 일정 이상 차이가 날 경우를 구합니다.
해당 경우가 또 일정 이상 될 경우 흔들었다는 것으로 확인하고 event를 줍니다.

코드


    //sensor
    private lateinit var accelerometerSensor: Sensor
    private lateinit var sensorManager: SensorManager
    private lateinit var sensorEventListener: SensorEventListener
    var beforeX = 0f
    var beforeY = 0f
    var beforeZ = 0f
    
    private fun initSensor(){
        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
        accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
        sensorEventListener = AccelerometerListener()
    }
    
    
    override fun onStart() {
        super.onStart()
        sensorManager.registerListener(sensorEventListener,accelerometerSensor,SensorManager.SENSOR_DELAY_UI)
    }

    override fun onStop() {
        super.onStop()
        sensorManager.unregisterListener(sensorEventListener)
    }
    
    
    var count = 0
    // 가속도 센서 이용
    private inner class AccelerometerListener : SensorEventListener {
        // 구현
        override fun onSensorChanged(event: SensorEvent?) {
            if(event?.sensor == accelerometerSensor){
                var change = Math.abs(event.values[0] - beforeX) + Math.abs(event.values[1] - beforeY) + Math.abs(
                    event.values[2] - beforeZ
                )
                if(change > 40){
                    count++
                    beforeX = event.values[0]
                    beforeY = event.values[1]
                    beforeZ = event.values[2]
                    Log.d(TAG, "onSensorChanged: change : ${change}")
                }
                if(count > 3){
                    count = 0
                    setData()
                    Toast.makeText(this@MaskActivity, "물품 정보가 갱신되었습니다.", Toast.LENGTH_SHORT).show()
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
                        vibrator.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE))
                    }
                }
            }
        }

        override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
        }
    }
profile
반갑습니다

0개의 댓글