インタースティシャル Admob 広告: 「IllegalStateException: フルスクリーン アクティビティのみが方向を要求できます」 質問する

インタースティシャル Admob 広告: 「IllegalStateException: フルスクリーン アクティビティのみが方向を要求できます」 質問する

背景

インタースティシャル広告(全画面広告)を表示するために、Admob SDK が使用されているアプリがあります。

最近、Google は、admob (Firebase 広告) を含む他の多くのもの (ビルド ツール、Gradle プラグイン、IDE など) とともに SDK を更新しました。

compile 'com.google.firebase:firebase-ads:11.4.2'

問題

アップデート後、アプリがインタースティシャル広告を表示しようとするとクラッシュすることに気付きました。

クラッシュログは次のとおりです。

10-28 14:01:01.394 4523-4523/... I/Ads: Ad opening.
10-28 14:01:01.400 1606-2154/? E/ActivityManager: Activity Manager Crash. UID:10080 PID:4523 TRANS:63
                                                  java.lang.IllegalStateException: Only fullscreen activities can request orientation
                                                      at com.android.server.am.ActivityRecord.setRequestedOrientation(ActivityRecord.java:2189)
                                                      at com.android.server.am.ActivityManagerService.setRequestedOrientation(ActivityManagerService.java:4975)
                                                      at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:1101)
                                                      at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2927)
                                                      at android.os.Binder.execTransact(Binder.java:697)


10-28 14:01:01.403 4523-4523/... D/AndroidRuntime: Shutting down VM
10-28 14:01:01.406 4523-4523/... E/AndroidRuntime: FATAL EXCEPTION: main

java.lang.RuntimeException: Unable to start activity ComponentInfo{.../com.google.android.gms.ads.AdActivity}: java.lang.IllegalStateException: Only fullscreen activities can request orientation

問題は、以前は問題なく動作していたことです。今は、何が原因で発生するのかわかりません。

ウェブで検索したところ、「フルスクリーン アクティビティのみが方向を要求できます」という内容は見つかりませんでした。

マニフェストに記載されていたのは少し古いもので、もう必要ないかもしれません。

    <activity
        android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
        android:theme="@android:style/Theme.Translucent"/>

おそらく必要ないと思います。なぜなら、過去にチュートリアルで見たことがあるのを覚えていますが、もう見られないからです。

私が試したこと

  1. マニフェスト エントリを削除しようとしました。それでも同じ問題が起こります。

  2. テーマを強制的に「@android:style/Theme.Translucent.NoTitleBar.Fullscreen」に設定してみましたが、それでも効果はありませんでした。

  3. 現在 Android 8.1 を使用しているためかもしれないとも思いましたが、Play ストアからアプリを使用してみると、クラッシュすることなく正常に動作していることに気付きました。

  4. admob のバージョン 11.2.2 まで戻って、gradle v 2.3.3 を使用しようとしましたが、それでも効果はありませんでした。

  5. Android 7.0 のエミュレーターで試したところ、すべてが最新バージョンで、マニフェスト アクティビティ タグ全体を削除しても正常に動作しました。

  6. 使用したものの代わりに、これを gradle ファイルで使用しようとしました:

    'com.google.android.gms:play-services-ads:11.4.2' をコンパイルします

私のデバイス (Android 8.1 搭載 Nexus 5x) ではまだクラッシュしますが、エミュレーターではクラッシュしません。

  1. 最後に、Android 8.1 のエミュレータでアプリを実行してみましたが、実際のデバイスと同じようにクラッシュしました。

  2. この件についてGoogle Admobチームに報告し、Android の問題追跡彼らがこの件について私に答えてくれることを願っています。

質問

この問題の原因は何でしょうか?

Android 8.1 が原因でしょうか? もしそうなら、なぜアプリの古いバージョンは正常に動作したのでしょうか? 何度も古いバージョンに戻そうとしましたが、それでもクラッシュします。

そして、最も重要なのは、どうすればそれを解決できるのかということです。

ベストアンサー1

編集

現在、新しいバージョンの Admob が利用可能です。最新リリース (15.0.1 以降) を使用すると、問題は発生しなくなることを確認しました。最新バージョンの Admob をご利用ください。

com.google.firebase:firebase-ads:17.1.2

以前に提案された回避策を使用した場合は、ターゲット バージョンを最新バージョンに設定します。

----------------------------------------------------------

問題を解決するために、ターゲットをAndroid APIレベル26に設定し、Admobの更新を待ちます。

build.gradle内

targetSdkVersion 26

targetSdkVersionが27以上(> android.os.Build.VERSION_CODES.Oつまり26)の場合、このエラーが発生し、変更されました。アクティビティ記録最新のAndroidバージョンではこれが追加されます:

void setRequestedOrientation(int requestedOrientation) {
        if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen
                && appInfo.targetSdkVersion > O) {
            throw new IllegalStateException("Only fullscreen activities can request orientation");
        ....
        }

この変更は、このコミット

非フルスクリーン アクティビティが方向に影響を与えないようにします。この変更リストは、O 以降をターゲットとするアクティビティがフルスクリーンの場合にのみ方向を指定できるように強制します。

そしておそらくadmob libでいくつかのチェックが間違っている

おすすめ記事