Интерстициальные объявления Admob: "IllegalStateException: только полноэкранные действия могут запрашивать ориентацию"
фон
у меня есть приложение с AdMob SDK, используемым в нем, чтобы показать интерстициальные объявления (полноэкранные объявления).
недавно Google обновил SDK, а также многие другие вещи (инструменты сборки, плагин gradle, IDE и т. д...), в том числе admob (firebase ads).
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"/>
Я говорю, что это, вероятно, не нужно, потому что я не могу видеть его больше в учебниках, хотя я помню, что я сделал в прошлое:
- https://developers.google.com/admob/android/quick-start
- https://developers.google.com/admob/android/interstitial
что я пробовал
Я попытался удалить запись манифеста. Все тот же вопрос.
Я попытался установить тему, чтобы быть "@android: стиль / тема.Полупрозрачный.NoTitleBar.Полноэкранный режим " силой, но он также не сделал помощь.
Я даже подумал, что это может быть потому, что у меня в настоящее время есть Android 8.1, но когда я попытался использовать приложение из play store, я заметил, что он работал просто отлично, без сбоев.
Я попытался вернуться к версии 11.2.2 admob и использовать gradle v 2.3.3 , но это также не помогло.
при попытке на эмуляторе с Android 7.0, он отлично работал с последними версиями всего, и удаление весь тег активности манифеста.
Я попытался использовать это в файле gradle, вместо того, что я использовал:
compile ' com.гуглить.андроид.gms: play-услуги-объявления: 11.4.2'
все еще разбился на моем устройстве (Nexus 5x с Android 8.1), но не разбился на эмуляторе.
наконец, я попытался запустить приложение на эмуляторе с Android 8.1, и он разбился так же, как на реальном устройстве.
об этом сообщила команда Google Admob, а также Android проблема tracker. Я надеюсь, что они ответят мне об этом.
вопросы
что может быть причиной этой проблемы?
Это из-за Android 8.1 ? Если да, то почему старая версия приложения работала нормально? Я попытался вернуть там много версий к старым, но он все равно разбился.
и, самое главное, как я могу решить это?
6 ответов:
кажется, что обновление до:
com.google.firebase:firebase-ads:15.0.1решить эту проблему для меня. Я только что протестировал его на Nexus 5X с 8.1.0 и теперь работают интерстициальные объявления Admob.
более полное решение:
приложения построить.Gradle в:
... android { compileSdkVersion 27 buildToolsVersion '27.0.3' defaultConfig { ... targetSdkVersion 27 .. } } dependencies { ... implementation 'com.google.firebase:firebase-core:15.0.2' implementation 'com.google.firebase:firebase-ads:15.0.1' ... } apply plugin: 'com.google.gms.google-services'сборка верхнего уровня.Gradle в:
buildscript { ... dependencies { ... classpath 'com.google.gms:google-services:3.3.0' ... } } ...
EDIT
теперь доступна более новая версия admob. Я подтверждаю, что с помощью последней версии проблема больше не появляется, поэтому вы можете использовать последнюю версию Admob
implementation com.google.firebase:firebase-ads:15.0.1установка целевой версии до последней, если вы использовали ранее предложенный обходной путь.
----------------------------------------------------------
установите целевой уровень API Android на 26, чтобы устранить проблему, ждем обновления Admob
в build.gradle
targetSdkVersion 26если
targetSdkVersionis > =27 (> android.os.Build.VERSION_CODES.Oто есть 26) Вы получаете эту ошибку, они изменились ActivityRecord в последней версии для Android, добавив Это:void setRequestedOrientation(int requestedOrientation) { if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen && appInfo.targetSdkVersion > O) { throw new IllegalStateException("Only fullscreen activities can request orientation"); .... }изменение было внесено в этот коммит
предотвратить не полноэкранные действия от влияния ориентации это список изменений обеспечивает, что действия, нацеленные на O и за его пределами, могут только укажите ориентацию, если они являются полноэкранными.
попробуйте добавить это в свой манифест
<activity android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" tools:replace="android:theme" />или, если вы используете appcompat:
<style name="TranslucentTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> etcи в манифесте убедитесь, что действие объявлено с
android:theme="@style/TranslucentTheme"
эта проблема будет автоматически исправлена, когда ad mob обновит свой Ads sdk для API 27 их зависимость от рекламы не поддерживает API 27, поэтому из-за этой проблемы возникает.
compile 'com.google.android.gms:play-services-ads:11.8.0'только полноэкранные действия могут запрашивать ориентацию,это связано с метаданными ads в вашем файле mainfest, admob должен обновить свой sdk для версии 27.
Если вы установили целевой sdk версии 27, то вы получите эту ошибку, на самом деле android обновление sdk очень быстро, и некоторые обновления admob оставил позади, чтобы сделать, для интеграции с Android sdk, так что admob есть в ожидании этого обновления ,они должны сделать это очень скоро, его не на стороне разработчика вопрос, если вы хотите, чтобы избежать этого сбоя затем установить sdk на 26.
пожалуйста, не используйте никаких свойств в Android Manifest files AdActivity.
пожалуйста, удалите эту строку из AdActivity в Манифесте
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"просто добавьте эту следующую строку в файл манифеста Android.
<activity android:name="com.google.android.gms.ads.AdActivity" />
в Android Oreo вы не можете изменить ориентацию по коду, поэтому вы должны проверить, когда изменить ориентацию
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }

Comments