Межстраничные объявления Admob: «IllegalStateException: только действия в полноэкранном режиме могут запрашивать ориентацию»

Задний план

У меня есть приложение с SDK Admob, используемое в нем, чтобы показывать рекламные объявления (полноэкранные объявления).

В последнее время Google обновил SDK, наряду со многими другими вещами (инструменты сборки, плагины градиента, IDE и т. Д.), Включая admob (объявления firebase).

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

Проблема

После обновления я заметил, что всякий раз, когда приложение пытается показать объявление Interstitial, оно выходит из строя.

Журнал сбоев таков:

 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"/> Размер  <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent"/> 

Я говорю, что это, вероятно, не нужно, потому что я больше не вижу этого в учебниках, хотя я помню, что делал это в прошлом:

  • https://developers.google.com/admob/android/quick-start
  • https://developers.google.com/admob/android/interstitial

Что я пробовал

  1. Я попытался удалить запись манифеста. Еще одна проблема.

  2. Я попытался установить тему «@android: style / Theme.Translucent.NoTitleBar.Fullscreen» силой, но это также не помогло.

  3. Я даже подумал, что это может быть потому, что у меня в настоящее время есть Android 8.1, но когда я попытался использовать приложение из магазина воспроизведения, я заметил, что он работает нормально, без сбоев.

  4. Я попытался вернуться к версии 11.2.2 admob и использовать gradle v 2.3.3, но это также не помогло.

  5. При попытке эмулятора с Android 7.0 он отлично работал с последними версиями всего и удалением всего тега активности манифеста.

  6. Я пытался использовать это в файле gradle вместо того, что я использовал:

    compile 'com.google.android.gms: play-services-ads: 11.4.2'

Все еще разбился на моем устройстве (Nexus 5x с Android 8.1), но не сработал на эмуляторе.

  1. Наконец, я попытался запустить приложение на эмуляторе с Android 8.1, и он разбился так же, как на реальном устройстве.

  2. Сообщается об этом команде Google Admob, а также трекеру для Android . Надеюсь, они ответят мне об этом.

Вопросы

Что может быть причиной этой проблемы?

Это из-за Android 8.1? Если да, то как пожилая версия приложения работает нормально? Я попытался вернуть туда много версий старым, но он все еще разбился.

И, самое главное, как я могу это решить?

Установите цель на уровень API Android до 26, чтобы исправить проблему, ожидая обновления Admob

В build.gradle

 targetSdkVersion 26 

если targetSdkVersion > = 27 ( > android.os.Build.VERSION_CODES.O ), вы получаете эту ошибку, они изменили ActivityRecord в последней версии Android, добавив:

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

Это изменение было внесено в эту фиксацию

Предотвращение влияния действий, не связанных с полноэкранным режимом. Этот список изменений предусматривает, что действия, ориентированные на O и выше, могут определять ориентацию только в том случае, если они являются полноэкранными.

Эта проблема будет автоматически исправлена, когда admob обновит их sdk за 27

Только полноэкранные действия могут запрашивать ориентацию, это связано с метаданными объявлений в вашем файле mainfest, admob должен обновить их sdk для версии 27. введите описание изображения здесь

если вы установили целевую версию sdk 27, вы получите эту ошибку, на самом деле обновление sroid sroid очень быстро, и некоторые дополнения admob остались позади, для интеграции с android sdk, поэтому admob ждут этого обновления, они должны сделать это очень скоро , Не проблема на стороне разработчика, если вы хотите сбежать от этого сбоя, тогда установите sdk на 26.