본문 바로가기
Language/Android

[Android] java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

by 썸머워즈 2019. 7. 9.
반응형

"java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation"


SDK 26 (Oreo) 버전에서 SDK 28 (Pie) 버전 으로 올리고 나서 잘되던 소스가 갑자기 에러를 뱉기 시작한다.

 

아직 나는 안드로이드에 관한 지식이 많이 없기에 받은 소스로만 돌렸거늘 참 당황스러운 상황이다.

 

그래서 여기저기 찾아본 결과 무슨 투명/불투명 작업이 원인이라고 하는데 원인은 둘째치고

 

가장 중요한 것은 이 오류는 API 26 (8.0) 기기 에서만 발생하는 오류(하필 내 폰이 8.0 이여서 한참 헤맸다..)라 한다.

 

그래서 딱 마지노선이 API 26 (8.0) / SDK 26  까지는 오류가 발생하지 않지만 

 

여기서 SDK 27 / SDK 28 등으로 올릴경우 저런 에러가 발생하는 것으로 사료된다.

 


이 문제를 해결하는 방법은 의외로 간단하다.

 

1. AndroidManifest.xml

 

Manifest.xml 파일에 다음과같이 android:screenOrientation="portrait"를 넣은게 분명 있을것이다.


<activity android:name=".TestActivity"

    android:screenOrientation="portrait"

    android:theme="@style/AppTheme.Transparent"

/>

 

그부분을 제거 해주거나 또는 "unspecified" 처리 해주면 된다.

 

 android:screenOrientation="unspecified"

 

(내가 본 소스에는 열개가 넘는 Activity에 저렇게 선언되어 있어서 에러가나는 Activity만 골라 제거해주었다.)


2. BaseActivity.java

 

분명 위 Manifest 에서 제거하거나 따로 처리해 주었는데 똑같은 에러가 뜬다!!! (내가 그랬다) 그럴경우

BaseActivity.java 를 한번 찾아가보면 다음과같이 항상 고정하도록 구현되어있는게 있을수있다.


setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

 

당장 이 기능이 필요가 없다면 주석 처리해도 되겠지만 어쩔수없이 해결을 해야한다면,

오버라이드 해서 해당 버전만 막아주면 된다.

 

@Override

public void setRequestedOrientation(int requestedOrientation){

      if(Build.VERSION.SDJ_INT != Build.VERSION_CODES.O){

         super.setRequestedOrientation(requestedOrientation);

      }

}


이정도로만 조치를 취해놔도 충분히 해결이 된다.

 

그 외 방법으로 해결하고자 하면 

https://gun0912.tistory.com/79

이분이 정리를 잘 해놨으니 보면 될거같다.

 

반응형


댓글

TOP