You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么部分设备上AdMob的AppOpenAd展示时会显示状态栏

AppOpenAd在部分设备展示时显示状态栏问题排查与解决

问题现象

在三星A20s、Nexus 5x等部分设备上展示AppOpenAd开屏广告时,会出现状态栏无法隐藏、残留显示的异常,效果如下图:
问题现象示意


触发原因

  • 系统层级适配差异:出现异常的设备大多运行Android 9及以下版本,或是搭载了厂商深度定制的ROM,这类系统对FLAG_FULLSCREEN全屏窗口标记的处理逻辑做了定制修改,AppOpenAd默认申请的全屏权限无法强制隐藏状态栏,导致状态栏残留。
  • AdMob SDK版本漏洞:21.0.0以下版本的AdMob SDK中,AppOpenAd对应的广告Activity没有适配低版本及定制ROM的全屏逻辑,仅依赖系统默认全屏标记生效,未主动设置状态栏隐藏、透明属性,导致适配失败。
  • 宿主App主题冲突:如果宿主App的Application层级主题配置了强制显示状态栏、状态栏不透明等属性,会优先覆盖广告Activity的部分配置,导致隐藏状态栏的逻辑失效。

可行解决方案

方案1:升级AdMob SDK到最新稳定版

Google官方在21.0.0及以上版本的AdMob SDK中已经修复了该适配问题,优先推荐升级依赖解决,Gradle配置参考:

dependencies {
    // 替换为当前官方最新稳定版即可
    implementation 'com.google.android.gms:play-services-ads:22.6.0'
}

方案2:覆盖广告Activity主题(适配无法升级SDK的场景)

如果业务侧暂时无法升级SDK,可以通过自定义主题强制指定广告页面全屏属性:

  1. 在res/values/styles.xml中添加全屏自定义主题:
<style name="AppOpenAdFullScreenTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>
  1. 在AndroidManifest.xml中覆盖AdMob广告Activity的主题配置:
<activity
    android:name="com.google.android.gms.ads.AdActivity"
    android:theme="@style/AppOpenAdFullScreenTheme"
    tools:replace="android:theme"/>

方案3:动态强制隐藏状态栏

如果上述方案仍有少量设备适配失败,可以在广告展示的回调中主动修改窗口参数,强制隐藏状态栏:

// Java实现示例
appOpenAd.show(activity, new FullScreenContentCallback() {
    @Override
    public void onAdShowedFullScreenContent() {
        Window window = activity.getWindow();
        if (window != null) {
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN 
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
    }
});
// Kotlin实现示例
appOpenAd.show(activity, object : FullScreenContentCallback() {
    override fun onAdShowedFullScreenContent() {
        activity.window?.run {
            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_FULLSCREEN
                    or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
            addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
        }
    }
})

内容的提问来源于stack exchange,提问作者Andriy D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:06:03