亚洲城地址

亚洲城地址官方网站下载安装

新闻发布日期:2018-4-25

间隙广告:“IllegalStateException:只有全屏活动才能请求定向”

我有一个应用程序,其中使用了AdmobSDK,以显示间隙广告(全屏广告)。

最近Google更新了SDK以及许多其他东西(构建工具、gradle插件、IDE等)…),包括admob(燃烧酶广告)。

1
2

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

更新之后,我注意到每当应用程序试图显示间隙广告时,它就会崩溃。

崩溃日志是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

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

问题是它以前工作得很好。现在我不知道是什么原因造成的。

在网上搜索时,我没有看到任何关于“只有全屏活动才能请求定向”的内容。

我在清单上看到的,是一些有点旧的东西,可能不再需要了:

1
2
3
4
5
6
7
8

<activity

android:name="com.google.android.gms.ads.AdActivity"

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

android:theme="@android:style/Theme.Translucent"/>

我说这可能是不需要的,因为在教程中我再也看不到它了,尽管我记得我曾经这样做过:

  • 我试图删除清单条目。还是同样的问题。

  • 我试图将主题设置为“@Android :风格/主题”。半透明。不要用武力。全屏显示,但也没用。

  • 我甚至认为这可能是因为我目前拥有Android8.1,但当我尝试使用play store的应用程序时,我注意到它工作正常,没有崩溃。

  • 我试图回到admob的11. 2 . 2版本,并使用gradle v 2 . 3 . 3,但它也没有帮助。

  • 在使用Android7.0进行模拟器测试时,它可以很好地处理最新版本的所有内容,并删除整个清单活动标记。

  • 我尝试在gradle文件中使用这个,而不是使用:
    GMS:播放服务-广告: 11 . 4 . 2

仍然在我的设备上崩溃(Nexus 5x与Android 8.1 ),但没有在模拟器上崩溃。

  • 最后,我尝试用Android8.1在模拟器上运行该应用程序,但它崩溃了,就像在真正的设备上一样。

  • 向谷歌Admob团队以及Android问题跟踪者报告了此事。我希望他们会回答我这个问题。

造成这一问题的原因是什么?

是因为Android8.1吗?如果是的话,为什么旧版本的应用程序运行良好?我曾试图将那里的许多版本还原为旧版本,但它仍然崩溃了。

最重要的是,我怎样才能解决它?

将目标设置为AndroidAPI级别26,以修复问题,等待Admob更新

在建造中

1
2

targetSdkVersion 26

如果targetSdkVersion> = 27 ( >安卓操作系统。o )收到此错误后,他们在最新Android版本中更改了活动记录,并添加了以下内容:

1
2
3
4
5
6
7
8
9
10
11
12

void setRequestedOrientation(int requestedOrientation) {

if (ActivityInfo.isFixedOrientation(requestedOrientation) && !fullscreen

&& appInfo.targetSdkVersion > O) {

throw new IllegalStateException("Only fullscreen activities can request orientation");

....

}

该更改已在此提交中引入

尝试在清单中添加此内容

1
2
3
4
5
6
7
8
9
10

<activity

android:name="com.google.android.gms.ads.AdActivity"

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

tools:replace="android:theme"

/>

或者,如果您正在使用appcat:

1
2
3
4
5
6
7
8
9
10
11
12

<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

在清单中,确保使用声明活动

1
2

android:theme="@style/TranslucentTheme"

当admob为API 27更新其广告SDK时,此问题将自动修复
他们的广告依赖关系不支持API 27,因此由于发生了这个问题。

1
2

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

只有全屏活动才能请求定向,这是由于广告元数据在您的主文件中,admob应更新其SDK为27版本。

如果你已经设置了目标SDK版本27,那么你会得到这个错误,实际上Android更新SDK非常快,并且一些更新admob留下来做,以便与AndroidSDK集成,所以admob已经等待这个更新,他们应该很快就这样做,这不是开发人员方面的问题,如果你想逃离这个崩溃,那么把你的SDK设置为26。

看起来他们仍然没有更新他们的SDK,因为我在他们最新的SDK版本中发现了这个问题。GMS:播放服务-广告: 11 . 8 . 0

请不要使用Android清单文件活动中的任何属性。

请从清单文件AdActivity中删除此行

1
2

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

只需将以下行添加到Android清单文件中。

1
2

<activity android:name="com.google.android.gms.ads.AdActivity" />