android - 插页式 Admob 广告 : "IllegalStateException: Only fullscreen activities can request orientation"

标签 android admob android-8.1-oreo

背景

我有一个使用 Admob SDK 的应用,用于显示插页式广告(全屏广告)。

最近,Google 更新了 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 可以请求方向”的内容。

我在 list 中的东西有点旧,可能不再需要了:

    <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. 我试图删除 list 条目。还是同样的问题。

  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 的模拟器上尝试时,它可以很好地处理最新版本的所有内容,并且删除了整个 list Activity 标签。

  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 issue tracker 报告了此事.我希望他们能回答我这个问题。

问题

这个问题的原因可能是什么?

是因为 Android 8.1 吗?如果是这样,该应用程序的旧版本如何运行良好?我试图将很多版本还原为旧版本,但它仍然崩溃。

而且,最重要的是,我该如何解决?

最佳答案

编辑

现在有更新的 admob 版本可用。 我确认使用最新版本(15.0.1 或更高版本)问题不再出现,因此您可以使用最新版本的 Admob

com.google.firebase:firebase-ads:17.1.2

如果您使用了之前建议的解决方法,请将目标版本设置为最新版本。

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

将目标设置为 Android API Level 为 26 以修复问题,等待 Admob 更新

在 build.gradle 中

targetSdkVersion 26

如果 targetSdkVersion is >=27 ( > android.os.Build.VERSION_CODES.Othat is 26) 你得到这个错误,他们在最新的 Android 中改变了 ActivityRecord添加这个的版本:

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

this commit 中已引入更改

Prevent non-fullscreen activities from influencing orientation This changelist enforces that activities targeting O and beyond can only specify an orientation if they are fullscreen.

并且可能在 admob lib 中搞砸了一些检查

关于android - 插页式 Admob 广告 : "IllegalStateException: Only fullscreen activities can request orientation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992843/

相关文章:

android - onAnimationEnd() 调用了两次

android - 使用 PendingIntent 的应用程序小部件中的 Oreo 服务未启动

android - 如何使用 javacv 在 android 中将图像转换为视频?

Android Camera.takePicture - 可以禁用快门声音和预览表面吗?

关闭后显示的 Android Publisher Interstitial Ad

cordova - 显示 Admob 广告\LocalStorage 损坏

java - BroadcastReceiver 在 Android 8.1+ 上无法捕获通话事件

android - 无法从 Android 直接连接到 SQL Server

android - 如何在我的 android 应用程序中找出哪个线程正在使用 CPU

android - Admob 广告页面浏览量远高于平板电脑上的展示次数