Το Android O καταργεί το TYPE_SYSTEM_OVERLAY υπέρ του TYPE_APPLICATION_OVERLAY, με αποτέλεσμα οι εφαρμογές που επικαλύπτονται πάνω από τη γραμμή κατάστασης να σπάνε.
Η ροή των αναρτήσεων που περιγράφουν νέες δυνατότητες που αντιμετωπίζουν οι χρήστες που βρίσκονται σε Android O αρχίζει να επιβραδύνεται τώρα που οι χρήστες είχαν στη διάθεσή τους εβδομάδες για να δοκιμάσουν το λογισμικό στη συσκευή τους. Ωστόσο, υπάρχουν πολλές, πάρα πολλές αλλαγές που έγιναν κάτω από το καπό που σιγά σιγά αποκαλύπτονται. Δημοσιεύσαμε για μια τέτοια αλλαγή μόλις τις προάλλες σχετικά με συσκευές Nexus και Pixel με Android O υιοθετώντας το SDCardFS. Αλλά σήμερα, θα θέλαμε να συζητήσουμε μια αλλαγή που θα επηρεάσει τους προγραμματιστές ορισμένων εφαρμογών, ιδιαίτερα εκείνων που επικάλυψη πάνω από τη γραμμή κατάστασης. Αυτές οι εφαρμογές φαίνεται να είναι σπασμένο στην προεπισκόπηση προγραμματιστή Android O, το οποίο με την πρώτη ματιά μπορεί να απορρίψετε ως απλό σφάλμα, αλλά βουτώντας βαθύτερα στην τεκμηρίωση αναφοράς, αυτό μπορεί να είναι μια επιδιωκόμενη αλλαγή από την Google.
Το Android O διακόπτει τις επικαλύψεις της γραμμής κατάστασης
Ένα από τα αγαπημένα μου πράγματα σχετικά με το Android είναι το πόσο προσαρμόσιμο είναι. Οι χρήστες που έχουν root ή εκτελούν προσαρμοσμένες ROM μπορούν να θέσουν τις γραμμές κατάστασης του συστήματός τους εγγενώς χωρίς ουσιαστικά περιορισμούς, αλλά εάν η συσκευή σας είναι unrooted έχετε λιγότερες επιλογές στη διάθεσή σας. Ευτυχώς, υπάρχουν πολλές εφαρμογές στο Google Play Store που σας επιτρέπουν να αλλάξετε τον τρόπο εμφάνισης της γραμμής κατάστασης σε βασικό επίπεδο. Αυτό είναι δυνατό χάρη σε έναν έξυπνο συνδυασμό System Overlay Windows για την εμφάνιση μιας προσαρμοσμένης γραμμής κατάστασης πάνω από την υπάρχουσα, Συσκευές ακρόασης ειδοποιήσεων για την εμφάνιση ειδοποιήσεων και προαιρετικά μια υπηρεσία προσβασιμότητας που επιτρέπει την προσαρμοσμένη απόχρωση με βάση τα συμφραζόμενα γραμμή κατάστασης.
Τα δύο παραπάνω στιγμιότυπα οθόνης δείχνουν πώς θα ήταν η γραμμή ειδοποιήσεών μου όταν χρησιμοποιούσα μία από τις πολλές εφαρμογές επικάλυψης γραμμής κατάστασης που είναι διαθέσιμες στο Play Store. Αυτά τα στιγμιότυπα οθόνης τραβήχτηκαν σε ένα μη ριζωμένο Huawei Mate 9 με EMUI 5.0. Για όσους από εσάς δεν είστε εξοικειωμένοι με το EMUI, η γραμμή κατάστασης δεν μοιάζει καθόλου με τα παραπάνω στιγμιότυπα οθόνης. Αντίθετα, μοιάζει με αυτό:
Εάν δεν σας ενοχλεί η εμφάνιση της γραμμής κατάστασης μετοχών σας, τότε εφαρμογές όπως π.χ Κατάσταση ή Γραμμή κατάστασης υλικού είναι θεόσταλτα. Ωστόσο, εάν ή όταν η συσκευή σας ενημερώσει σε Android O, αυτές οι εφαρμογές ενδέχεται να μην λειτουργούν πλέον. Δείτε πώς μοιάζουν αυτές οι δύο ίδιες εφαρμογές σε ένα Google Pixel που εκτελεί την προεπισκόπηση προγραμματιστή Android O:
Αντί η επικάλυψη να μπλοκάρει την αρχική γραμμή κατάστασης, μοιάζει με την επικάλυψη επικαλύψεις με την αρχική γραμμή κατάστασης που οδηγεί σε τεράστιο χάος.
Δυστυχώς, αυτό ουσιαστικά καθιστά άχρηστες εφαρμογές όπως αυτές. Και δεν είναι μόνο οι τυπικές εφαρμογές θεμάτων της γραμμής κατάστασης που επηρεάζονται από αυτό - επηρεάζονται όλες οι εφαρμογές που απαιτούν να εμφανίζεται μια επικάλυψη στο επάνω μέρος της γραμμής κατάστασης.
Ακολουθεί μια λίστα με μερικές δημοφιλείς εφαρμογές που μπορεί να καταστήσουν άχρηστες:
- Κατάσταση (500.000 - 1.000.000 εγκαταστάσεις)
- Γραμμή κατάστασης υλικού (1.000.000 - 5.000.000 εγκαταστάσεις)
- Cool Tool - Στατιστικά συστήματος (500.000 - 1.000.000 εγκαταστάσεις)
- Telecine (50.000 - 100.000 εγκαταστάσεις)
- Καθαρίστε τη γραμμή κατάστασης (100.000 - 500.000 εγκαταστάσεις)
- Tinycore (100.000 - 500.000 εγκαταστάσεις)
Και μια λίστα με ορισμένες εφαρμογές που θα λειτουργούν, αλλά δεν μπορούν πλέον να επικαλύπτονται πάνω από τη γραμμή κατάστασης (περιορίζοντας την προηγούμενη λειτουργικότητα):
- Λυκόφως (5.000.000 - 10.000.000 εγκαταστάσεις)
- HeadsUp (100.000 - 500.000 εγκαταστάσεις)
- Μίνι παρακολούθησης πόρων (50.000 - 100.000 εγκαταστάσεις)
- Network Monitor Mini (1.000.000 - 5.000.000 εγκαταστάσεις)
Υπάρχουν πολλές περισσότερες εφαρμογές στο Play Store που χρησιμοποιούν κάποιο είδος επικάλυψης στην κορυφή της γραμμής κατάστασης, αλλά μπορείτε ήδη να πείτε ότι μια τέτοια αλλαγή θα επηρεάσει πολλές εφαρμογές που χρησιμοποιούνται από δυνητικά εκατομμύρια χρήστες. Τι συμβαίνει λοιπόν εδώ;
Το TYPE_SYSTEM_OVERLAY καταργείται
Με κάθε νέα επανάληψη του Android, η Google εισάγει και καταργεί (καθορίζει ως απαρχαιωμένες και προς κατάργηση) διάφορες λειτουργίες. Αυτή τη φορά, το χαρακτηριστικό που βρίσκεται στο μπλοκ κοπής είναι TYPE_SYSTEM_OVERLAY. Για να παραθέσω το σελίδα αναφοράς για το τι πρόσφερε αυτή η δυνατότητα στους προγραμματιστές:
TYPE_SYSTEM_OVERLAY
Τύπος παραθύρου: παράθυρα επικάλυψης συστήματος, τα οποία πρέπει να εμφανίζονται πάνω από οτιδήποτε άλλο. Αυτά τα παράθυρα δεν πρέπει να εστιάζουν στην είσοδο, διαφορετικά θα επηρεάσουν το κλείδωμα πληκτρολογίου. Στα συστήματα πολλών χρηστών εμφανίζεται μόνο στο παράθυρο του ιδιοκτήτη του χρήστη.
Στην ουσία, αυτός ο τύπος παραθύρου επιτρέπει σε μια εφαρμογή να σχεδιάζει πάνω από οποιοδήποτε στοιχείο στην οθόνη - συμπεριλαμβανομένης της γραμμής κατάστασης. Ωστόσο, ξεκινώντας από το Android O, αυτός ο τύπος παραθύρου έχει καταργηθεί. Για εφαρμογές εκτός συστήματος, η Google συνιστά στους προγραμματιστές να χρησιμοποιούν το TYPE_APPLICATION_OVERLAY. Για να παραθέσω το σελίδα αναφοράς για το τι κάνει αυτός ο νέος τύπος παραθύρου:
TYPE_APPLICATION_OVERLAY
Τύπος παραθύρου: Τα παράθυρα επικάλυψης εφαρμογής εμφανίζονται πάνω από όλα τα παράθυρα δραστηριότητας (τύπους μεταξύ
FIRST_APPLICATION_WINDOW
καιLAST_APPLICATION_WINDOW
) αλλά κάτω από κρίσιμα παράθυρα συστήματος όπως η γραμμή κατάστασης ή το IME.Το σύστημα μπορεί να αλλάξει τη θέση, το μέγεθος ή την ορατότητα αυτών των παραθύρων ανά πάσα στιγμή για να μειώσει την οπτική ακαταστασία του χρήστη και επίσης να διαχειριστεί τους πόρους.
Το σύστημα θα προσαρμόσει τη σημασία των διεργασιών με αυτόν τον τύπο παραθύρου για να μειώσει την πιθανότητα να τις σκοτώσει ο δολοφόνος χαμηλής μνήμης.
Σε συστήματα πολλών χρηστών εμφανίζεται μόνο στην οθόνη του ιδιοκτήτη του χρήστη.
Όπως μπορείτε να δείτε, αυτός ο νέος τύπος παραθύρου επιτρέπει στις εφαρμογές να επικαλύπτουν περιεχόμενο πάνω από όλα τα άλλα παράθυρα δραστηριότητας εκτός "κρίσιμα παράθυρα συστήματος όπως η γραμμή κατάστασης ή το IME" (το IME αναφέρεται στο πληκτρολόγιο). Αυτό είναι καλό για εφαρμογές όπως το Facebook Messenger, καθώς τα chathead που παρέχονται από αυτήν την εφαρμογή δεν έχουν σκοπό να βρίσκονται στην κορυφή της γραμμής κατάστασης, αλλά αυτό επηρεάζει αρνητικά τις περισσότερες από τις εφαρμογές που ανέφερα προηγουμένως.
Επιπλέον, αυτή τη στιγμή δεν φαίνεται να υπάρχει λύση για χρήση από τους προγραμματιστές. Θα περίμενε κανείς ότι, για να αποφευχθεί αυτό το ζήτημα στο Android O, οι προγραμματιστές απλώς κατασκευάζουν τις εφαρμογές τους για να στοχεύουν το SDK 25 (Android 7.1.1). Ωστόσο, όπως επισημαίνεται από την προγραμματιστής του Status στο Reddit, η Google έχει αντικαταστάθηκε TYPE_SYSTEM_OVERLAY με TYPE_APPLICATION_OVERLAY και η αλλαγή είναι ανεξάρτητα από το στόχο SDK εκδοχή. Οι προγραμματιστές που χρησιμοποιούν TYPE_SYSTEM_OVERLAY προς το παρόν πρέπει να χρησιμοποιούν TYPE_APPLICATION_OVERLAY για να διατηρήσουν τη συμβατότητα, επομένως, ανεξάρτητα από την έκδοση SDK στόχου στην οποία βασίζεται μια συγκεκριμένη εφαρμογή, μπορεί να δεν χρησιμοποιείτε πλέον το TYPE_SYSTEM_OVERLAY στο Android O.
Τι μπορεί να γίνει για αυτό;
Δεν είναι ακριβώς σαφές γιατί η Google έκανε αυτήν την αλλαγή, καθώς δεν έχουν δώσει ακόμη επίσημη εξήγηση. Η εικασία μου είναι ότι πρόκειται για μια προσπάθεια βελτίωσης της ασφάλειας στο Android αποτρέποντας τους ανυποψίαστους χρήστες να εγκαταστήσουν κατά λάθος εφαρμογές που μπλοκάρουν ή αντικαθιστούν τη γραμμή κατάστασής τους κακόβουλα. Δυστυχώς, αυτή η αλλαγή συλλαμβάνει πολλές απολύτως νόμιμες εφαρμογές που χρησιμοποιούν TYPE_SYSTEM_OVERLAY στη διασταυρούμενη πυρά.
Οι προγραμματιστές που χρησιμοποιούν αυτήν τη δυνατότητα έχουν ανοίξει αναφορές σφαλμάτων στο Android Issue Tracker (#260787 και #36574245) για να διαμαρτυρηθεί για την αλλαγή και να ζητήσει ένα εναλλακτικό API, αλλά ένας υπάλληλος της Google σχολίασε την παρακολούθηση με το ακόλουθη δήλωση:
Κατάσταση: Δεν θα διορθωθεί (Προβλεπόμενη συμπεριφορά)
Συνεχίσαμε με την ομάδα προϊόντων και μηχανικών και λάβαμε πρόταση ότι οι προγραμματιστές μπορούν να χρησιμοποιήσουν δραστηριότητες SHOW_WHEN_LOCKED για να εμφάνιση όταν η συσκευή είναι κλειδωμένη, αλλά σκόπιμα δεν είναι πλέον δυνατή η εμφάνιση πάνω από την οθόνη κλειδώματος / πάνω από το σκίαστρο ειδοποιήσεων
Προς το παρόν, φαίνεται ότι αυτοί οι προγραμματιστές δεν έχουν τύχη, καθώς οι προγραμματιστές έχουν επισημάνει ότι το FLAG_SHOW_WHEN_LOCKED εξακολουθεί να μην επιτρέπει την επικάλυψη των παραθύρων πάνω από τη γραμμή κατάστασης. Δεν είναι ξεκάθαρο τι μπορούν να κάνουν οι προγραμματιστές αυτών των εφαρμογών εκτός από το να προσεύχονται για την Google να αλλάξει τα πράγματα ή να κάνει την κόλαση γι' αυτό.
Δεδομένου ότι αυτή είναι μόνο η πρώτη Προεπισκόπηση προγραμματιστή για Android O, εξακολουθεί να είναι δυνατό για την Google να τις αλλάξει και παρέχει αυτήν τη λειτουργία για εφαρμογές που δεν στοχεύουν το Android O ή για επαναφορά της Google TYPE_SYSTEM_OVERLAY. Αλλά αν τα πράγματα παραμείνουν όπως είναι σήμερα, μπορείτε φιλήστε αυτές τις εφαρμογές αντίο. Και αυτό θα ήταν κρίμα.
Ευχαριστώ τον Eli Irvin που δοκίμασε πολλές από αυτές τις εφαρμογές για μένα!