5

OrientationEventListener 이벤트를보고하지 않는 경우에도 문제가 발생합니다.OrientationEventListener가 비활성화 된 경우 onOrientationChanged()가 호출되고 있습니다.

탭 레이아웃에서 세 조각으로 작업하고 있으며 단편 중 하나에 만 방향 변경이 필요합니다. 이 조각에서 벗어나면 오리엔테이션 이벤트가 효과를 멈추길 바란다. 장치를 이동시키면서 I의 단편을 전환 할 때

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 

    if (orientationEventListener == null) 
    { 
     Log.w(LogTags.MOBILE_MONITOR, "Creating orientationListener in " + this.toString()); 
     orientationEventListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_NORMAL) { 
      @Override 
      public void onOrientationChanged(int angle) { 

       ...Do work using getActivity()... 

      } 
     }; 
    } 

} 

@Override 
public void onResume() { 
    super.onResume(); 
    orientationEventListener.enable();  
} 

@Override 
public void onPause() { 
    super.onPause(); 
    orientationEventListener.disable(); 
} 

문제가되어 다음과 같이

내 코드의주기 부분이다. 의 getActivity()onOrientationChanged(int angle)에 전화하면 null을 반환합니다. 즉, 사용하려고하면 null 포인터 예외가 발생합니다.

여기에 null 체크를 추가 할 수 있지만 리스너를 명확하게 비활성화했을 때 방향 이벤트가 발생하는 이유를 알고 싶습니다. 실패 지점에서 OrientationEventListener을 검사하면 mEnabled=false도보고됩니다. 이벤트가 내 리스너에게 전파되는 것을 막을 수있는 방법이 있습니까?

+0

안녕 슬레 이크, 이것에 대한 해결책을 찾았습니까? 나는 같은 문제에 직면 해있다. –

답변

0

오리엔테이션을 ActivityInfo.SCREEN_ORIENTATION_SENSOR으로 설정하면 활동이 실제 방향 센서에 의해 자동으로 회전됩니다. https://developer.android.com/reference/android/R.attr.html#screenOrientation

활동의 방향 모드를 재설정하여이를 해결하십시오. 예를 들어, 기본 세로 레이아웃으로 다시 설정하십시오.

mOrientationEventListener.disable(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
관련 문제