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

Android 15中AdMob导致Material You动态颜色更新失效求助

问题:AdMob初始化导致Android 15上Material You动态颜色失效

一旦调用MobileAds.initialize(this),Material You的动态颜色更新功能就会失效。切换系统调色板后返回应用,颜色不会自动更新,必须重启应用才能生效;注释掉该初始化代码后,动态颜色功能恢复正常。

复现步骤

  • 使用Pixel 8 API 35模拟器
  • 在Android Studio中创建新的空白项目
  • 添加依赖:implementation("com.google.android.gms:play-services-ads:25.1.0")
  • 在AndroidManifest.xml中添加示例AdMob ID:
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-3940256099942544~3347511713"/>
  • 在MainActivity的onCreate方法中添加以下代码:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val systemColor = this.getColor(android.R.color.system_accent1_500)
    Log.d("MainActivity", "ColorCheck onCreate. systemColor $systemColor")

    MobileAds.initialize(this)
}

此时切换系统调色板后返回应用,日志始终打印相同的颜色值,仅重启应用后才会更新;不初始化MobileAds则功能正常。

已知情况

该问题仅出现在Android 15(API 35)模拟器上,Android 14和Android 16模拟器无此问题。已有相关问题反馈,但目前暂无官方修复进展。

规避方案

1. 延迟AdMob初始化

不在Activity的onCreate中立即初始化AdMob,而是等到应用首次需要加载广告时再执行初始化逻辑。这样既不影响广告功能,也能保留动态颜色的实时更新:

fun loadFirstAd() {
    if (!MobileAds.isInitialized()) {
        MobileAds.initialize(this)
    }
    // 执行广告加载逻辑
}

2. 手动触发颜色更新

在应用从后台回到前台时,手动重新获取系统颜色并更新UI。可以通过重写onResume方法实现:

override fun onResume() {
    super.onResume()
    // 重新获取最新的系统 accent 颜色
    val updatedAccentColor = getColor(android.R.color.system_accent1_500)
    // 更新相关UI组件,例如 Toolbar 背景
    supportActionBar?.setBackgroundDrawable(ColorDrawable(updatedAccentColor))
    // 如果需要全局更新主题,可调用 recreate()(注意:会重启Activity,需评估用户体验影响)
    // recreate()
}

3. 降级AdMob SDK版本

尝试使用24.x系列的play-services-ads依赖,部分开发者反馈旧版本未触发此问题,但需注意版本兼容性及潜在的功能缺失风险。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:04:53