android_crash

【Android】「Only fullscreen opaque activities can request orientation」エラーの対処方法【強制終了】

#Android
written by じゅんじゅん

お久しぶりです。

GOATのAndroidエンジニアじゅんじゅんです。

最近とてつもなく多忙で、夏のエアコン疲れもあり疲労困憊です。。。
そんなこんなで睡眠が至福状態の私ですが、
業務中に遭遇したクラッシュの内容が、久々に見たものでしたので共有したいと思います!

発生したエラー

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

クラッシュ発生時の状況

minSdk = 26、targetSdk = 31を設定したアプリでの、OS毎の動作確認実施時に
Android8.0(APILevel 26)のエミュレータを使用したことでクラッシュが発生しました。

Android8.1(APILevel 27)以上のエミュレータではクラッシュが発生しない状況となっていました。

原因

  • Android8.0の端末もしくはエミュレータを使用している
  • AndroidManifest/targetSdkVersionを27以上に設定している
  • 背景の透過設定をしている
  • 画面回転を固定している

上記に記載した条件がすべて満たされる場合に、クラッシュが発生しているようでした。

こちらを参考にさせていただきましたので、詳細は以下サイトをご確認ください。

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

対処方法

私の動作確認をした環境では、以下の様に画面回転を固定する設定がされておりました。

/* AndroidManifest.xml */

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application>
        <activity android:name=".TranslucentActivity"
         android:configChanges="orientation"
               android:screenOrientation="portrait" ← この部分
               android:theme="@style/Translucent" />
    </application>
</manifest>

今回はどうしても画面の向きを縦で固定したアプリとしたい為
該当の個所を「android:screenOrientation="behind"」に変更することで対応しました。

このbehindの設定は、起動元となるActivityの画面向きに合わせて動作するようになります。

(基本的には、画面回転に対応したアプリを作成するようにすれば何も問題は無いんですけどね笑)

最後に

時代も進み、Androidも今やAndroid13までバージョンアップしていますが
Android8.0を動作対象外とするのもユーザ数的にまだまだ許容できない状態にあります。

画面回転をしないアプリを開発している際は気を付けたい問題ですね。

ではでは、皆様も体調に気を付けてお過ごしください。ノシ