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

Android 12从通知启动应用时启动屏图标不显示

问题描述

我正在使用Android 12启动屏API,从启动器打开应用时启动屏图标显示正常,但从通知打开应用时仅显示启动屏背景,不显示图标或动画图标。

当前配置

我的Activity在AndroidManifest.xml中使用的v31/styles.xml里的主题:

<style name="MainActivityTheme" parent="AppTheme">
    <item name="android:windowSplashScreenBackground">@color/splash_screen_background</item>
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_screen_icon</item>
</style>

我还尝试了另一个主题,但没有效果:

<style name="SplashScreenTheme" parent="Theme.SplashScreen">
    <item name="android:windowSplashScreenBackground">@color/splash_screen_background</item>
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_screen_icon</item>
    <item name="postSplashScreenTheme">@style/MainActivityTheme</item>
</style>

解决思路

  • 检查通知Intent标记:确保通知触发的Intent没有设置FLAG_ACTIVITY_CLEAR_TASK这类可能干扰启动屏逻辑的标记,同时确认目标Activity和启动器打开的是同一个,主题配置正确。
  • 确认主题绑定关系:若使用Theme.SplashScreen作为父主题,需直接在AndroidManifest.xml中将该主题设置给目标Activity,避免间接引用导致属性失效;同时检查v31/styles.xml是否因资源适配问题未被正确加载。
  • 手动初始化启动屏:在目标Activity的onCreate方法中显式调用启动屏API,确保所有启动路径都触发初始化:
    override fun onCreate(savedInstanceState: Bundle?) {
        val splashScreen = installSplashScreen()
        super.onCreate(savedInstanceState)
        // 后续业务初始化逻辑
    }
    
    Java版本:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
        super.onCreate(savedInstanceState);
        // 后续业务初始化逻辑
    }
    
  • 验证PendingIntent配置:创建通知的PendingIntent时,使用FLAG_UPDATE_CURRENT或Android 12+推荐的FLAG_IMMUTABLE,避免Intent实例异常导致启动流程出错。
  • 检查图标资源有效性:确认@drawable/splash_screen_icon符合Android 12启动屏资源格式要求,且在通知启动场景下没有加载失败的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:15:34