Android/센서 | Posted by 덩치 2014. 1. 7. 10:36

기본적인 센서(Sensor) 사용법

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

1. 클래스에 SensorEventListener 참조설정

2. onResume에서 센서값 받아오는 딜레이 설정

3. 리스너가 읽어들이는 센서값 판별, 활용


public class MainActivity extends Activity implements SensorEventListener {

SensorManager sm;

Sensor gyroSensor;

@Override

protected void onCreate(Bundle saveInstanceState) {

sm =  = (SensorManager) getSystemService(SENSOR_SERVICE);

//4가지 센서 설정

gyroSensor = sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

accSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

magSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

oriSensor = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);

}

//액티비티에 SensorEventListener를 참조하게 되면 Add unimplemented methods를 통해 밑의 항목을 오버라이드한다.

@Override

protected void onResume() {

super.onResume();

//4가지 센서에 대한 딜레이 설정. 이걸 해 줘야 리스너로 값이 떨어짐

sm.registerListener(this, gyroSensor, SensorManager.SENSOR_DELAY_UI);

sm.registerListener(this, accSensor , SensorManager.SENSOR_DELAY_UI);

sm.registerListener(this, magSensor, SensorManager.SENSOR_DELAY_UI);

sm.registerListener(this, oriSensor , SensorManager.SENSOR_DELAY_UI);

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

//정확도 변경시 사용된다는것 같은데 정확한 용도는 잘 모르겠다. 사용되는건 한번도 못 본듯 하다.

}

@Override

public void onSensorChanged(SensorEvent event) {

//여기서 센서값이 변하는걸 체크한다.

switch (event.sensor.getType()) {

case Sensor.TYPE_GYROSCOPE :

Log.d("tag", "TYPE_GYROSCOPE");

break;

case Sensor.TYPE_ACCELEROMETER :

Log.d("tag", "TYPE_ACCELEROMETER");

break;

//등등으로 쭉 나간다.

}

}

}


센서의 값을 확인하는 방법은 case절 안에서

event.values[0] , event.values[1] , event.values[2] 를 출력하면 x,y,z축의 값이 출력된다.

Log.d("tag", "" + event.values[0]); 이런식으로 ..


이상으로 간단한 센서 사용법을 알아보았다.

문의사항이나 태클걸만한게 있다면 언제든지 댓글 남겨주시길.

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

Display dis = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

int x = dis.getWidth();

int y = dis.getHeight();


이렇게 하면 디바이스의 가로,세로 길이가 나온다. 단위는 픽셀

Android/기본스킬 | Posted by 덩치 2013. 12. 31. 11:19

핸들러(Handler) 사용하기

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


기본적이지만 아주 중요한 Handler

주로 Thread와 함께 사용된다.

안드로이드는 Thread 내에서 UI작업이 불가능하다.

 만약 Thread 내에서 UI작업을 하게되면

CalledFromWrongThreadException 예외가 발생하게된다.

이를 해결하기 위해 핸들러를 이용해 다른 스레드에서 UI에 직접 접근하지 않고

핸들러를 거쳐 접근하여 UI작업을 처리해야한다.


두가지 사용법을 알아보자

1. post로 호출하여 사용하기

Handler handle = new Handler();
public Runnable callback = new Runnable() {
public void run() {
// 실행
}
};

호출하는법은
스래드 내에서 callback 안의 내용을 실행하고싶을 때 
handle.post(callback);
딜레이를 주고싶을 때는 handle.postDelayed(callback, 1000); (1초 뒤 실행)


2. message를 보내 호출하기

Handler handle = new Handler() {

public void handleMessage(Message msg) {

if (msg.waht==0x0001) {


}

else if (msg.what==1) {


}

}

};


호출은 handle.sendEmptyMessage(0x0001);  등으로 한다.