Android 12-Begrüßungsbildschirmsymbol wird nicht angezeigt

Lesezeit: 9 Minuten

Ich sehe ein seltsames Problem mit einer neuen App, die ich starte. Ich verwende die neue Android 12-Begrüßungsbildschirm-API, um meinen Begrüßungsbildschirm zu erstellen, und folgte der Anleitung von Google dazu. Ich habe Core-Splashscreen in mein Projekt aufgenommen, um die Kompatibilität mit älteren Versionen des Android-Betriebssystems zu gewährleisten. Wenn ich die App ausführe, sehe ich den Begrüßungsbildschirm wie erwartet auf älteren Betriebssystemversionen wie API 30, aber wenn ich sie auf API 31 ausführe, wird das von mir bereitgestellte Begrüßungsbildschirmsymbol nicht angezeigt. Die von mir angegebene Hintergrundfarbe wird angezeigt, aber das Symbol ist überhaupt nicht vorhanden. Ich habe dies mit einem Drawable-Asset sowie einer Mipmap versucht und nichts funktioniert. Ich bin ratlos, da jedes Tutorial, das ich finde, die gleichen Schritte zeigt, denen ich gefolgt bin, und Screenshots ihrer funktionierenden Begrüßungsbildschirme, aber ich habe kein Glück.

Als Kontext hier meine Splash-Screen-Style-Definition für 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>

Ich habe einen identischen Stil für alle anderen Betriebssystemversionen, außer dass ich “windowSplashScreenAnimatedIcon” anstelle von “android:windowSplashScreenAnimatedIcon” verwende. Ich habe v31 mit und ohne “android:” vor den Artikelnamen ausprobiert und beides funktioniert nicht. Hier ist meine MainActivity.kt:

class MainActivity : AppCompatActivity() {

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

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

Ich setze auch die Eigenschaft „android:theme“ auf meinen Splash-Stil in meiner AndroidManifest.xml. Ich weiß, dass der Splash-Stil angewendet wird, weil er die Hintergrundfarbe berücksichtigt, aber das Symbol wird aus irgendeinem Grund nicht angezeigt, obwohl das Symbol für ältere Betriebssystemversionen gut angezeigt wird. Vielen Dank im Voraus für jede Hilfe, die Sie geben können.

  • Gleich, habe gerade die neue Splash-Screen-API auf einem Android 12-Emulator ausprobiert, aber schade, dass das Symbol nicht angezeigt wird, egal ob ich das “android:windowSplashScreenAnimatedIcon” setze oder nicht, aber das “android:windowSplashScreenBackground” funktioniert aber. Sollten wir es als Fehler betrachten? Die API ist meiner Meinung nach nicht sehr freundlich für ältere Versionen von Android-Geräten.

    – ja

    3. November 2021 um 3:31 Uhr

  • Ja, ich denke, ich werde versuchen, einen Fehler bei Google zu melden und zu sehen, was sie sagen.

    – Joseph Hawkes-Cates

    3. November 2021 um 18:59 Uhr

  • Nun, ich habe herausgefunden, wie ich es anzeigen kann. Ich folgte dieses Tutorial um ein Basisprojekt einzurichten, um das Problem zu reproduzieren, und mir ist die Notiz aufgefallen, die der Autor ganz unten platziert hat, in der erwähnt wird, dass das bloße Ausführen der App den Begrüßungsbildschirm nicht anzeigt. Sie müssen es beenden und die App aus dem App-Tray öffnen. Sobald ich das getan habe, konnte ich meinen Begrüßungsbildschirm sehen. Ärgerlich, aber zumindest habe ich jetzt eine Möglichkeit, es zu testen.

    – Joseph Hawkes-Cates

    3. November 2021 um 19:29 Uhr


  • Ich habe den Fehlerbericht protokolliert, da dies verwirrend ist, aber mit meinem letzten Kommentar habe ich jetzt eine Möglichkeit, dies zu testen. Hier ist der Fehlerbericht, falls es jemanden interessiert: issuetracker.google.com/issues/205021357.

    – Joseph Hawkes-Cates

    3. November 2021 um 20:01 Uhr

  • Da ich das gleiche Problem habe, scheint Google noch nicht dazu gekommen zu sein, es zu untersuchen. Hoffentlich bald.

    – AndroidDev123

    28. Dezember 2021 um 19:07 Uhr

Benutzeravatar von Joseph Hawkes-Cates
Joseph Hawkes-Cates

TL;DR Beenden Sie die App und führen Sie sie über den Launcher aus. Das Symbol wird nicht angezeigt, wenn Sie von Android Studio aus ausgeführt werden.

Ich füge meinen Kommentar hier als Antwort zur besseren Sichtbarkeit hinzu.

Ich habe herausgefunden, wie ich es anzeigen kann. Ich folgte dieses Tutorial um ein Basisprojekt einzurichten, um das Problem zu reproduzieren, und ich bemerkte die Notiz des Autors ganz unten, in der erwähnt wird, dass das bloße Ausführen der App nicht den vollständigen Begrüßungsbildschirm anzeigt. Sie müssen es töten und die App über den Launcher öffnen. Sobald ich das getan habe, konnte ich meinen Begrüßungsbildschirm sehen. Ärgerlich, aber zumindest habe ich jetzt eine Möglichkeit, es zu testen. Ich habe weitergemacht und mich angemeldet Fehlerbericht auch dafür, aber ich habe vorerst eine Lösung. Danke für alle Antworten/Kommentare!

  • Dieses Problem machte mich wahnsinnig. Ich habe Googles Leitfaden zur Migration und die anderen Dokumente zur SplashScreen-API befolgt. Aber auf meinem Pixel verwende ich Nova Launcher als Desktop und Sie werden nie das Symbol / die Bilder auf dem Begrüßungsbildschirm sehen, wenn Sie die App über eine Verknüpfung oder die Schublade starten, wenn Sie Nova Launcher verwenden. Und immer noch dasselbe beim Start mit Android Studio. Ich habe das Symbol/die Bilder nur auf dem Begrüßungsbildschirm angezeigt, als ich die App mit dem Pixel Launcher gestartet habe. So schlecht gemacht.

    – Gimberg

    18. Januar um 13:29 Uhr

  • Meine Güte, Android. Immer für eine Überraschung gut. Sieht so aus, als wäre es immer noch fehlerhaft (naja, die Bibliothek ist Beta, also keine Überraschung – sie wird jedoch bereits für API-Level 31 erzwungen). Danke Joseph für die Problemumgehung, das hat mir schon viel Zeit gespart! Ich kann jedoch nicht auf den Fehlerbericht zugreifen, ist der Link korrekt? Und das Problem mit dem anderen Launcher, wie von @Gimberg erwähnt, ist auch sehr ärgerlich.

    – Luzian

    28. Januar um 17:42 Uhr

  • @AndrewS, ja, ich bin neu bei Android, also immer noch die richtige Terminologie. Aus Gründen der Übersichtlichkeit wurde es auf Launcher anstelle von App Tray umgestellt.

    – Joseph Hawkes-Cates

    6. Februar um 2:09 Uhr

  • @Luzian, ich habe bis zum 25. Januar E-Mail-Updates für diesen Fehlerbericht erhalten. Mir wird auch der Zugriff verweigert, wenn ich es jetzt besuche, also bin ich mir nicht sicher, was dort oben ist.

    – Joseph Hawkes-Cates

    6. Februar um 2:15

  • Ich habe einen anderen Bericht gefunden, der von jemand anderem protokolliert wurde, und es scheint, als würde Google dies als beabsichtigtes Verhalten markieren … Link als Referenz: issuetracker.google.com/199776339

    – Joseph Hawkes-Cates

    6. Februar um 2:23


Benutzeravatar von Vadim Caen
Wadim Caen

Wenn Sie die AndroidX SplashScreen-Bibliothek verwenden, wie Sie es tun (Theme.SplashScreen) müssen Sie die verwenden windowSplashScreen* Attribute ohne die android: Präfix.

Das android: Präfix wird verwendet, um die Plattformattribute aufzurufen, aber in diesem Fall verwenden Sie die Bibliothek und nicht die Plattform, sodass das Präfix nicht erforderlich ist:

res/values/themes.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>

  • Das ist richtig, aber beachten Sie trotzdem, dass andere gesagt haben: Die Bibliothek ist in Alpha, also ist sie ein bisschen instabil. In den meisten Fällen funktioniert es wie erwartet, aber ich habe festgestellt, dass das Symbol nicht angezeigt wird, wenn ich die bereits geöffnete App installiere, wenn ich sie öffne. Außerdem konnte ich das Symbol für API unter 23 nicht zum Laufen bringen. Es funktioniert gut ab API 23 und höher. Aus den Versionshinweisen geht hervor, dass das erwartet wurde: developer.android.com/jetpack/androidx/releases/…

    – geht zurück

    3. November 2021 um 15:19 Uhr


  • Okay, das macht Sinn. Ich habe es sowohl mit als auch ohne das Präfix „android:“ versucht und es funktioniert auf API 31 so oder so nicht. Es funktioniert jedoch gut auf API 30. Ich bin ein wenig überrascht, dass es sich um diese Art von Problem handelt, da die Funktion neu ist und für API 31 entwickelt wurde. Dies ist also der letzte Ort, an dem ich mit Problemen gerechnet habe.

    – Joseph Hawkes-Cates

    3. November 2021 um 18:58 Uhr

  • Vadim, erläutere bitte genau, wo wir das verwenden werden. Benennen Sie die Ressourcendatei, das Manifest oder etwas anderes, wo dies hingehört. Wie geschrieben ist dies sehr unklar.

    – Andreas S

    25. Januar um 19:46 Uhr

  • Dies stand im Zusammenhang mit der OP-Antwort. Ich werde meiner Antwort einige Details hinzufügen

    – Wadim Caen

    27. Januar um 13:56 Uhr

Leute gemäß dem Dokument installSplashScreen() hätten vor super.onCreate() aufgerufen werden sollen

  • Das ist ein guter Fang. Es wäre schön, wenn sich diese Dokumentation direkt auf der installSplashScreen-Funktion statt auf SplashScreen-Klassenebene oder in diesem Handbuch befinden würde: developer.android.com/guide/topics/ui/splash-screen. Ich habe keinen Grund, direkt auf die SplashScreen-Klasse zu verweisen, es sei denn, ich mache eine anspruchsvollere Anpassung. Leider behebt das Verschieben des installSplashScreen-Aufrufs an die richtige Stelle dieses Problem immer noch nicht.

    – Joseph Hawkes-Cates

    17. Februar um 20:00 Uhr


  • Wenn man sich den Code ansieht, scheint es, als würden sie empfehlen, installSplashScreen vor super.onCreate() aufzurufen, da setContentView intern in super.onCreate() aufgerufen wird und das installSplashScreen-Dokument angibt, dass es vor setContentView aufgerufen werden muss. Anscheinend gilt dies nur, wenn Sie Ihre Aktivität mit einer Ansichts-ID initialisieren, anstatt die Ansicht manuell aufzublasen. Da ich Compose verwende, denke ich, solange es vor meinem setContent-Block aufgerufen wird, ist es in Ordnung. Es schadet aber definitiv nicht, es vor super.onCreate zu verschieben.

    – Joseph Hawkes-Cates

    17. Februar um 20:10 Uhr

Auch beim Navigieren über den Deeplink werden keine Icons angezeigt. Und es sieht so aus, als ob es mehr als nur das Symbol nicht anzeigt. Es hört auch auf, Code für aufzurufen setOnExitAnimation Lambda.

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

Wenn Sie sich darauf verlassen haben, dass dieser Code immer aufgerufen wird, ist dies nicht der Fall. Siehe Erwähnung im Issue-Tracker: https://issuetracker.google.com/issues/207095799

Benutzeravatar von Sakhawat Hossain
Sachawat Hossain

Die folgende Anleitung hat mir geholfen, Sie können diese ausprobieren. Bei der Arbeit mit der neuen Begrüßungsbildschirm-API müssen einige Dinge beachtet werden.

  1. Bleiben Sie über die neueste Bibliotheksversion auf dem Laufenden. Folge diesem Link (https://developer.android.com/jetpack/androidx/releases/core).
  2. Setzen Sie installSplashScreen() vor setContentView()
  3. Erstellen Sie ein geeignetes Thema für den Begrüßungsbildschirm. Sie können das folgende versuchen.

Fügen Sie dies in Ihren Ordner styles.xml oder themes.xml ein und verwenden Sie es mit Ihrer Aktivität als Thema.

 <!-- 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>

Benutzeravatar von Narendra_Nath
Narendra_Nath

Stellen Sie sicher, dass Sie das Thema auch auf die MainActivity setzen. Für mich war das der Grund dafür, dass der Startbildschirm jetzt angezeigt wird. Sie müssen also das Thema sowohl in der Anwendung als auch in der MainActivity festlegen

Aus irgendeinem Grund wird das Symbol nicht angezeigt, wenn die App über Android Studio gestartet wird. Beenden Sie die App und starten Sie die App über das Menü. Dann erscheint das Symbol. Dies gilt, wenn Sie die Splash-API nicht verwenden: https://developer.android.com/develop/ui/views/launch/splash-screen/migrate

  • Diese Antwort wurde bereits vom OP bereitgestellt

    – SimonC

    5. September um 9:16

1431700cookie-checkAndroid 12-Begrüßungsbildschirmsymbol wird nicht angezeigt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy