背景
我有一个使用 Admob SDK 的应用程序,用于显示插页式广告(全屏广告)。
最近谷歌更新了 SDK,以及许多其他东西(构建工具、gradle 插件、IDE 等),包括 admob(firebase 广告)。
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:style/Theme.Translucent.NoTitleBar.Fullscreen”,但它也没有帮助。
我什至认为这可能是因为我目前使用的是 Android 8.1,但是当我尝试使用 Play 商店中的应用程序时,我发现它运行良好,没有崩溃。
我试图回到 admob 的版本 11.2.2 并使用 gradle v 2.3.3 ,但它也没有帮助。
在使用 Android 7.0 的模拟器上试用时,它可以很好地处理最新版本的所有内容,并删除了整个清单活动标签。
我试图在 gradle 文件中使用它,而不是我使用的:
编译 ‘com.google.android.gms:play-services-ads:11.4.2’
仍然在我的设备(Nexus 5x 和 Android 8.1)上崩溃但没有在模拟器上崩溃。
最后,我尝试在装有 Android 8.1 的模拟器上运行该应用程序,它崩溃了,就像在真实设备上一样。
向 Google Admob 团队以及 Android 问题跟踪器 报告了此事。我希望他们能就此回答我。
问题
这个问题的原因可能是什么?
是因为安卓8.1吗?如果是这样,为什么旧版本的应用程序运行良好?我试图将那里的很多版本还原为旧版本,但它仍然崩溃了。
而且,最重要的是,我该如何解决它?
原文由 android developer 发布,翻译遵循 CC BY-SA 4.0 许可协议
似乎升级到:
为我解决了这个问题。我刚刚在带有 8.1.0 的 Nexus 5X 上对其进行了测试,现在可以使用 Interstitial Admob 广告了。
更完整的解决方案:
应用程序的build.gradle:
顶级build.gradle: