logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

[안드로이드] 가속도 (Accelerometer)센서 Shake 이벤트 예제

by digipine posted Nov 02, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
 
public class ShakeActivity extends Activity implements SensorEventListener {
 
    private long lastTime;
    private float speed;
    private float lastX;
    private float lastY;
    private float lastZ;
    private float x, y, z;
 
    private static final int SHAKE_THRESHOLD = 800;
    private static final int DATA_X = SensorManager.DATA_X;
    private static final int DATA_Y = SensorManager.DATA_Y;
    private static final int DATA_Z = SensorManager.DATA_Z;
 
    private SensorManager sensorManager;
    private Sensor accelerormeterSensor;
 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        accelerormeterSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }
 
    @Override
    public void onStart() {
        super.onStart();
        if (accelerormeterSensor != null)
            sensorManager.registerListener(this, accelerormeterSensor,
            SensorManager.SENSOR_DELAY_GAME);
    }
 
    @Override
    public void onStop() {
        super.onStop();
        if (sensorManager != null)
            sensorManager.unregisterListener(this);
    }
 
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
 
    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            long currentTime = System.currentTimeMillis();
            long gabOfTime = (currentTime - lastTime);
            if (gabOfTime > 100) {
                lastTime = currentTime;
                x = event.values[SensorManager.DATA_X];
                y = event.values[SensorManager.DATA_Y];
                z = event.values[SensorManager.DATA_Z];
 
                speed = Math.abs(x + y + z - lastX - lastY - lastZ) / gabOfTime * 10000;
 
                if (speed > SHAKE_THRESHOLD) {
                    // 이벤트발생!!
                }
 
                lastX = event.values[DATA_X];
                lastY = event.values[DATA_Y];
                lastZ = event.values[DATA_Z];
            }
 
        }
 
    }
}
 

List of Articles
No. Subject Author Date Views
22 안드로이드 개발시 API Key, 암호화 정보 코드에서 숨기는 방법, Kotlin DSL의 경우 lizard2019 2023.06.20 457
21 구글에서 제공하는 안드로이드 개발 기초 학습코스 file digipine 2022.03.18 605
20 Toolchain Error 'No such file or directory' 해결방법 lizard2019 2019.12.19 1512
19 Ubuntu 16.0.4 openjdk 7 설치방법 lizard2019 2019.12.19 978
18 Ubuntu 리눅스 fastboot 설치 lizard2019 2019.12.13 1663
17 atomic vs volatile vs synchronized file 엉뚱도마뱀 2017.12.18 1312
16 Atomic Operation에 대해서 엉뚱도마뱀 2017.12.18 1361
15 Android 하드웨어 코덱 포팅하기, OpenCore, OpenMAX digipine 2017.11.03 1791
14 Ubuntu 기본 쉘 dash 대신 bash로 설정 digipine 2017.11.02 804
» [안드로이드] 가속도 (Accelerometer)센서 Shake 이벤트 예제 digipine 2017.11.02 1754
12 Android - 블루투스 BLE 개발하기 digipine 2017.11.02 16916
11 안드로이드 Native C 코드에서 Intent 보내는 방법 digipine 2017.11.02 1455
10 안드로이드 시스템 개발시 mmm 커멘드 사용법 digipine 2017.11.01 1334
9 Android - 이미지(비트맵) 리사이징 digipine 2017.11.01 1477
8 [Java] SortedSet과 Comparable을 이용한 정렬(Sort) digipine 2017.10.29 924
7 Android - AlarmManager를 이용해서 서비스 실행 시키는 코드 digipine 2017.10.29 579
6 Android - 슬립모드 (Sleep Mode) 방지 코드 digipine 2017.10.29 2573
5 Android - Browser 에서 Activity 실행하기 file digipine 2017.10.29 867
4 안드로이드 파일 입출력시 한글 깨짐 문제 digipine 2017.10.29 1830
3 Android 기반 Application Ant 빌드 방법 digipine 2017.10.29 1267
Board Pagination Prev 1 2 Next
/ 2