Το Android Nougat (7.1+) διαθέτει λειτουργία ανίχνευσης πανικού που ανιχνεύει αν ο χρήστης πατάει μανιωδώς το κουμπί επιστροφής. Διαβάστε περισσότερα για να ακούσετε τι κάνει.
Ενώ πολλοί αναγνώστες ιστοτόπων με επίκεντρο το Android, όπως ο δικός μας, είναι λιγότερο πιθανό να συναντήσουν περιπτώσεις όπου μια αδίστακτη εφαρμογή θέτει σε κίνδυνο το σύστημά τους, το ίδιο μπορεί να μην ισχύει για τον γενικό πληθυσμός. Σχεδόν κάθε εβδομάδα ακούμε από διάφορους ερευνητές ασφαλείας για νέο κακόβουλο λογισμικό που στοχεύει χρήστες Android. Οι περισσότερες από αυτές τις κακόβουλες επιθέσεις μπορούν να αποφευχθούν επιθεωρώντας τα δικαιώματα ή αποφεύγοντας την εγκατάσταση εφαρμογών με πρόχειρη εμφάνιση και Αν και συνιστούμε στους αναγνώστες μας να πάρουν στα χέρια τους την ασφάλεια του τηλεφώνου τους, η Google είναι υπεύθυνη για την ασφάλεια κάθε Android τηλέφωνο. Για το σκοπό αυτό, η εταιρεία παρουσίασε αθόρυβα μια νέα δυνατότητα ασφαλείας στο Android 7.1 Nougat που ονομάζεται "ανίχνευση πανικού" που ακούει για πολλαπλά πατήματα κουμπιών επιστροφής διαδοχικά και στη συνέχεια επιστρέφει τον χρήστη στην αρχική του οθόνη.
Πολύ απλά, εάν μια αδίστακτη εφαρμογή επιχειρήσει να παραβιάσει την οθόνη του χρήστη και να εμποδίσει τον χρήστη να φύγει (ίσως με εφαρμόζοντας μια Υπηρεσία Προσβασιμότητας για την παρακολούθηση όλων των βασικών συμβάντων), το Android θα παρακάμψει το ίδιο την εφαρμογή για να επαναφέρει το αρχική οθόνη. Ο χρήστης μπορεί στη συνέχεια πιθανώς να απεγκαταστήσει την κακόβουλη εφαρμογή από το πρόγραμμα εκκίνησης.
Αυτή η δυνατότητα έπεσε κάτω από το ραντάρ, όπως είναι κατανοητό, καθώς η Google πιθανότατα δεν θα ήθελε να διαφημιστεί στον κόσμο με έναν τρόπο που καταστρέφει κακόβουλες εφαρμογές. Αλλά μια γρήγορη ματιά στον ανοιχτό κώδικα του Android αποκαλύπτει πώς λειτουργεί αυτή η απλή δυνατότητα στις συσκευές που το υποστηρίζουν.
Εξέταση του Κώδικα
Πρώτα απ 'όλα, μόνο και μόνο επειδή η συσκευή σας εκτελεί Android 7.1+ δεν σημαίνει ότι αυτή η συμπεριφορά ανίχνευσης πανικού είναι στην πραγματικότητα ενεργοποιημένη. Η τιμή που καθορίζει εάν το χαρακτηριστικό είναι ενεργοποιημένο μπορεί να βρεθεί στο config.xml
αρχείο εντός του SystemUI APK.
<integername="config_backPanicBehavior">0integer>
Από προεπιλογή, η αντίδραση του Android στα πατήματα πανικού του κουμπιού πίσω είναι να μην κάνει τίποτα. Αν η ακέραια τιμή του config_backPanicBehavior
έχει οριστεί στο 1, ωστόσο, εκεί ξεκινά το νέο μέτρο προστασίας του Android.
Στα πλαίσια PhoneWindowManager.java
μπορούμε να δούμε το μεγαλύτερο μέρος του τρόπου υλοποίησης αυτής της δυνατότητας. Πρώτα απ 'όλα, το αρχείο ορίζει δύο πράγματα: πόσα πατήματα κουμπιών πίσω χρειάζονται για να διαπιστώσει το σύστημα ότι ο χρήστης "πανικοβάλλεται" και στη συνέχεια ποια ενέργεια πρέπει να κάνει με βάση αυτή την κατάσταση.
// Number of presses needed before we induce panic press behavior on the back button
staticfinalint PANIC_PRESS_BACK_COUNT = 4;
staticfinalint PANIC_PRESS_BACK_NOTHING = 0;
staticfinalint PANIC_PRESS_BACK_HOME = 1;
Από προεπιλογή, το σύστημα απαιτεί 4 συνεχόμενα πατήματα του κουμπιού επιστροφής για να μπει στη λειτουργία πανικού. Αν η συνάρτηση χρησιμοποιεί ή όχι την ακέραια τιμή του PANIC_PRESS_BACK_NOTHING
ή PANIC_PRESS_BACK_HOME
καθορίζεται από την τιμή στο αρχείο διαμόρφωσης εντός του SystemUI APK.
Ανεξάρτητα από αυτήν την τιμή, κάθε πάτημα πολλαπλών κουμπιών επιστροφής ελέγχεται για να διαπιστωθεί εάν θα μετρηθεί ως πάτημα πανικού. Πρώτα, το σύστημα παρεμποδίζει το πάτημα προς τα κάτω για το KEYCODE_BACK συμβάν κλειδιού και ελέγχει εάν το σύστημα έχει ρυθμιστεί να ελέγχει για πολλαπλά ή παρατεταμένα πατήματα του πλήκτρου. Στη συνέχεια, το σύστημα ελέγχει εάν πρέπει να περάσει ή όχι το επάνω πάτημα για το ίδιο συμβάν κλειδιού KEYCODE_BACK στην εφαρμογή χρήστη.
Στο interceptBackKeyDown()
Εάν ο μετρητής πιέσεων πίσω πλήκτρου είναι μεταξύ 1 και 3, τότε το σύστημα παραλείπει το χρονικό όριο ανίχνευσης πολλαπλών πιέσεων, καθώς η ανίχνευση πανικού απαιτεί τουλάχιστον 4 πατήματα για να πραγματοποιηθεί οποιαδήποτε ενέργεια.
Στη συνέχεια, μόλις ο χρήστης αφαιρέσει το δάχτυλό του από το πλήκτρο πίσω, το οποίο ενεργοποιεί ένα συμβάν επάνω, το interceptBackKeyUp
προσθέτει 1 στον μετρητή του πίσω κλειδιού. Στη συνέχεια δημιουργεί ένα μήνυμα για 300 χιλιοστά του δευτερολέπτου στο μέλλον. Ο λόγος για αυτό είναι επειδή το σύστημα δεσμεύει μια περίοδο καθυστέρησης 300 χιλιοστών του δευτερολέπτου όταν αποφασίζει εάν το πάτημα του κουμπιού πίσω είναι μέρος ενός συμβάντος πολλαπλών πιέσεων. Εάν είναι, τότε ο χρήστης μπορεί να πανικοβάλλεται πατώντας το κουμπί, ώστε το σύστημα να μην στέλνει το βασικό συμβάν στην εφαρμογή χρήστη.
Η τιμή χρονικού ορίου πολλαπλής πίεσης 300 ms αποθηκεύεται στην ασφαλή ρύθμιση "multi_press_timeout
" όπως φαίνεται παρακάτω.
/**
* The duration in milliseconds between the first tap's up event and the second tap's
* down event for an interaction to be considered part of the same multi-press.
* @hide
*/
publicstaticfinal String MULTI_PRESS_TIMEOUT = "multi_press_timeout";
Από προεπιλογή, αυτή η τιμή έχει οριστεί στα 300ms.
/**
* Defines the default duration in milliseconds between the first tap's up event and the second
* tap's down event for an interaction to be considered part of the same multi-press.
*/
privatestaticfinalint DEFAULT_MULTI_PRESS_TIMEOUT = 300
Στη συνέχεια, εάν όντως ανιχνευθεί πολλαπλό πάτημα (>1 κουμπί επιστροφής ολοκληρώνεται πάνω/κάτω πατά μέσα σε 300 ms), το σύστημα καλεί το backMultiPressAction
μέθοδος για τον προσδιορισμό της δράσης που πρέπει να κάνετε. Τέλος, ο μετρητής του κουμπιού επιστροφής επαναφέρεται στο 0.
Αν και είναι μια πολύ μικρή, μη δημοσιοποιημένη λειτουργία, εξακολουθεί να είναι ωραίο να βλέπουμε τι εργάζεται η Google στα παρασκήνια, προκειμένου να κάνει το Android πιο ασφαλές για τον μέσο χρήστη.