코드 상에서 회전을 풀고, 또는 고정을 해서 사용을 합니다.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //가로화면 고정
가로 모드에서 고정으로 해놓고 사용을 하다가 통신을 받거나 특정 버튼을 눌러
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); //회전가능.
회전 가능한 상태로 돌려 줍니다.
가로모드를 고정하기 전에는 센서가 동작하여 현제의 화면에 대해서 getRotation 정보를 가져 옵니다.
하지만, 가로모드를 고정후 왼쪽에서 반대방향으로 회전을 변경한다거나, 오른쪽에서 반대방향으로 변경하면
이미 센서가 죽어 있기 때문에 getRotation정보를 가져오지 못합니다.
즉,
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 세로 전환시 발생
}else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 가로 전환시 발생
}
}//End of public void onConfigurationChanged(Configuration newConfig)
@Override
public void setRequestedOrientation(int requestedOrientation) {
// TODO Auto-generated method stub
super.setRequestedOrientation(requestedOrientation);
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
nRotation = display .getRotation();
}
이 2가지의 메서드를 타지 않습니다.
따로 이벤트를 얻어 올수 있는 방법이 있나요?
미리 가로모드로 고정을 해버리면 센서가 작동하지 않기 때문에 onConfigurationChanged와 setRequestedOrientation 함수를
타지 않기 때문에 getRotation정보를 가지 오지 못하는데
다른 방법이 있나요?




SensorEventListener를 implement해서 사용해보세요 고정된 값과 별개로 사용가능 합니다.
그리고 SensorManager로 orientaion sensor 를 registerListener해주셔야 합니다.