El icono de la pantalla de bienvenida de Android 12 no se muestra

9 minutos de lectura

Veo un problema extraño con una nueva aplicación que estoy iniciando. Estoy utilizando la nueva API de pantalla de inicio de Android 12 para crear mi pantalla de inicio y seguí el guía proporcionada por Google para hacerlo Incluí core-splashscreen en mi proyecto para proporcionar compatibilidad con versiones anteriores del sistema operativo Android. Cuando ejecuto la aplicación, veo la pantalla de inicio como se esperaba en versiones anteriores del sistema operativo como API 30, pero cuando la ejecuto en API 31, el ícono de la pantalla de inicio que proporciono no se muestra. Se muestra el color de fondo que especifico, pero el icono no aparece en absoluto. He intentado esto con un activo dibujable, así como con un mipmap y nada funciona. Estoy perplejo ya que cada tutorial que encuentro muestra los mismos pasos que he seguido y capturas de pantalla de sus pantallas de bienvenida en funcionamiento, pero no estoy teniendo suerte.

Para el contexto, aquí está mi definición de estilo de pantalla de bienvenida para v31:

<style name="Theme.Splash" parent="Theme.SplashScreen">
    <item name="android:windowSplashScreenBackground">@color/orange_7A</item>
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_foreground</item>
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

Tengo un estilo idéntico para todas las demás versiones del sistema operativo, excepto que uso “windowSplashScreenAnimatedIcon” en lugar de “android:windowSplashScreenAnimatedIcon”. Probé v31 con y sin el “android:” delante de los nombres de los elementos y ninguno funciona. Aquí está mi MainActivity.kt:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    installSplashScreen()
    
    setContent {
        MyVeevaTheme {
            Login()
        }
    }
}

También configuro la propiedad “android:theme” en mi estilo de bienvenida en mi AndroidManifest.xml. Sé que el estilo de salpicadura se está aplicando porque respeta el color de fondo, pero no muestra el ícono por alguna razón, aunque el ícono se muestra bien para versiones anteriores del sistema operativo. Gracias de antemano por cualquier ayuda que puedas aportar.

  • Lo mismo, acabo de probar la nueva API de pantalla de inicio en un emulador de Android 12, pero es una pena que el ícono no se muestre, ya sea que configure “android:windowSplashScreenAnimatedIcon” o no, pero “android:windowSplashScreenBackground” funciona. ¿Deberíamos considerarlo como un error? Creo que la API no es muy amigable para la versión anterior de los dispositivos Android.

    -yao

    3 de noviembre de 2021 a las 3:31

  • Sí, creo que intentaré registrar un error en Google y ver qué dicen.

    – Joseph Hawkes-Cates

    3 de noviembre de 2021 a las 18:59

  • Bueno, descubrí cómo hacer que se muestre. yo estaba siguiendo este tutorial para configurar un proyecto base para recrear el problema y noté la nota que el autor colocó cerca de la parte inferior que menciona que simplemente ejecutar la aplicación no muestra la pantalla de inicio. Tienes que matarlo y abrir la aplicación desde la bandeja de aplicaciones. Una vez que hice eso, pude ver mi pantalla de inicio. Molesto, pero al menos tengo una manera de probarlo ahora.

    – Joseph Hawkes-Cates

    3 de noviembre de 2021 a las 19:29


  • Seguí adelante y registré el informe de error ya que esto es confuso, pero con mi último comentario, tengo una manera de probar esto ahora. Aquí está el informe de error si alguien tiene curiosidad: tematracker.google.com/issues/205021357.

    – Joseph Hawkes-Cates

    3 de noviembre de 2021 a las 20:01

  • Teniendo el mismo problema, no parece que Google haya comenzado a investigarlo todavía. Espero que pronto.

    – AndroidDev123

    28 de diciembre de 2021 a las 19:07

Avatar de usuario de Joseph Hawkes-Cates
Joseph Hawkes Cates

TL; DR elimine la aplicación y ejecútela desde el iniciador, el ícono no aparece cuando se ejecuta desde Android Studio.

Agregar mi comentario aquí como respuesta para una mejor visibilidad.

Descubrí cómo hacer que se muestre. yo estaba siguiendo este tutorial para configurar un proyecto base para recrear el problema y noté la nota que el autor colocó cerca de la parte inferior que menciona que solo ejecutar la aplicación no muestra la pantalla de inicio completa. Tienes que matarlo y abrir la aplicación desde el lanzador. Una vez que hice eso, pude ver mi pantalla de inicio. Molesto, pero al menos tengo una manera de probarlo ahora. Seguí adelante y registré un informe de error para esto también, pero tengo un trabajo por ahora. ¡Gracias por las respuestas/comentarios de todos!

  • Este problema me estaba volviendo loco. Seguí la Guía de Google sobre cómo migrar y los otros documentos relacionados con la API de SplashScreen. Pero en mi Pixel, uso Nova Launcher como escritorio y nunca obtendrá el icono/imágenes en la pantalla de inicio cuando inicie la aplicación desde un acceso directo o el cajón cuando use Nova Launcher. Y sigue igual cuando se inicia con Android Studio. Solo obtuve el icono o las imágenes en la pantalla de presentación cuando inicié la aplicación con Pixel Launcher. Tan mal hecho.

    – Gimberg

    18 de enero a las 13:29

  • Caray, Android. Siempre es bueno para una sorpresa. Parece que todavía tiene errores (bueno, la lib es beta, así que no es de extrañar; sin embargo, ya se aplica para el nivel 31 de api) Gracias Joseph por la solución, ¡esto ya me ahorró mucho tiempo! Sin embargo, no puedo acceder al informe de errores, ¿es correcto el enlace? Y el problema con el otro lanzador mencionado por @Gimberg también es muy molesto.

    – Luzian

    28 de enero a las 17:42

  • @AndrewS, sí, soy nuevo en Android, así que sigo obteniendo la terminología correcta. Lo cambié para que sea un iniciador en lugar de una bandeja de aplicaciones para mayor claridad.

    – Joseph Hawkes-Cates

    6 de febrero a las 2:09

  • @Luzian, recibí actualizaciones por correo electrónico para ese informe de error hasta el 25 de enero. También me niegan el acceso cuando lo visito ahora, así que no estoy seguro de qué hay allí.

    – Joseph Hawkes-Cates

    6 de febrero a las 2:15

  • Encontré otro informe registrado por otra persona y parece que Google lo está marcando como un comportamiento previsto… enlace de referencia: tematracker.google.com/199776339

    – Joseph Hawkes-Cates

    6 de febrero a las 2:23


Avatar de usuario de Vadim Caen
vadim caen

Cuando usa la biblioteca SplashScreen de AndroidX, como lo está haciendo (Theme.SplashScreen) necesitas usar el windowSplashScreen* atributos sin el android: prefijo.

los android: El prefijo se usa para llamar a los atributos de la plataforma, pero en este caso está usando la biblioteca y no la plataforma, por lo que no es necesario el prefijo:

res/valores/temas.xml:

<style name="Theme.Splash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">@color/orange_7A</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/splash_foreground</item>
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

  • Eso es correcto, pero aún así, tenga en cuenta que otros dijeron: la biblioteca está en alfa, por lo que es un poco inestable. En la mayoría de los casos funciona como se esperaba, sin embargo, he notado que cuando adb instalo la aplicación que ya está abierta, cuando la abro, el ícono no aparece. Además, no pude hacer que el ícono funcionara para API por debajo de 23. Funciona bien desde API 23 y superior. De las notas de la versión, supongo que eso se esperaba: desarrollador.android.com/jetpack/androidx/releases/…

    – rewgoes

    3 de noviembre de 2021 a las 15:19


  • Bien, eso tiene sentido. Lo probé con y sin el prefijo “android:” y, sin embargo, no funciona en API 31. Sin embargo, funciona bien en API 30. Estoy un poco sorprendido de que sea este tipo de problema, ya que la función es nueva y está diseñada para API 31, por lo que es el último lugar en el que esperaba tener problemas.

    – Joseph Hawkes-Cates

    3 de noviembre de 2021 a las 18:58

  • Vadim, explica exactamente dónde usaremos esto. Asigne un nombre al archivo de recursos, manifiesto u otro lugar donde deba ir. Como está escrito, esto no está muy claro.

    – Andrés S.

    25 de enero a las 19:46

  • Esto fue en el contexto de la respuesta OP. Agregaré algunos detalles a mi respuesta.

    – Vadim Caen

    27 de enero a las 13:56

gente según el documento installSplashScreen() debería haber sido llamado antes de super.onCreate()

  • Esta es una buena captura. Sería bueno si esa documentación estuviera directamente en la función installSplashScreen en lugar de en el nivel de clase de SplashScreen o en esta guía: developer.android.com/guide/topics/ui/splash-screen. No tengo ninguna razón para hacer referencia a la clase SplashScreen directamente a menos que esté haciendo una personalización más sofisticada. Desafortunadamente, mover la llamada installSplashScreen al lugar correcto aún no soluciona este problema.

    – Joseph Hawkes-Cates

    17 de febrero a las 20:00


  • Mirando el código, parece que recomiendan llamar a installSplashScreen antes de super.onCreate() porque setContentView se llama internamente en super.onCreate() y el documento installSplashScreen especifica que debe llamarse antes de setContentView. Parece que eso solo se aplica si está inicializando su actividad con una ID de vista en lugar de inflar manualmente la vista. Como estoy usando Compose, creo que siempre que se llame antes de mi bloque setContent, está bien. Sin embargo, definitivamente no está de más moverlo antes de super.onCreate.

    – Joseph Hawkes-Cates

    17 de febrero a las 20:10

Los iconos tampoco se muestran cuando se navega desde el enlace profundo. Y parece que es más que solo no mostrar el ícono. También deja de llamar al código para setOnExitAnimation lambda.

installSplashScreen().apply {
    setOnAnimationListener { viewProvider ->
    viewProvider.iconView
    .animate()
    .setDuration(500L)
    .alpha(0f)
    .withEndAnimation {
       viewProvider.remove()
       someActionCall() 
    }
    .start()
} 

Si confiaba en que este código se llamará siempre, no lo es. Ver mención en el rastreador de problemas: https://issuetracker.google.com/issues/207095799

Avatar de usuario de Sakhawat Hossain
Sakhawat Hossain

Las siguientes instrucciones me ayudaron, puedes probar con esta. Algunas cosas deben tenerse en cuenta al trabajar con la nueva API de pantalla de presentación.

  1. Manténgase actualizado sobre la última versión de la biblioteca. Siga este enlace (https://developer.android.com/jetpack/androidx/releases/core).
  2. Coloque installSplashScreen() antes de setContentView()
  3. Cree un tema adecuado para la pantalla de inicio. Puedes probar con el siguiente.

Póngalo en su carpeta styles.xml o themes.xml y utilícelo con su actividad como tema.

 <!-- Splash Screen Theme. -->
<style name="Theme.AppSplash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">@color/white</item>
    <item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_round</item>
    <item name="windowSplashScreenAnimationDuration">1000</item>
    <item name="postSplashScreenTheme">@style/AppTheme</item>
</style>

Avatar de usuario de Narendra_Nath
narendra_nath

Asegúrese de configurar el tema en MainActivity también. Para mí, esa fue la causa de que ahora se muestre la pantalla de bienvenida. Por lo tanto, debe configurar el tema tanto en la aplicación como en MainActivity

Por alguna razón, cuando la aplicación se inicia a través de Android Studio, no muestra el ícono. Elimine la aplicación e inicie la aplicación desde el menú. Luego aparecerá el icono. Esto es cierto si no está utilizando la API de Splash: https://developer.android.com/develop/ui/views/launch/splash-screen/migrate

  • Esta respuesta ya ha sido proporcionada por el OP

    – SimonC

    5 de septiembre a las 9:16

¿Ha sido útil esta solución?