Android 7.1+ har en "Panic Detection"-tilstand, der registrerer hektiske tilbage-knaptryk

Android Nougat (7.1+) har en panikdetektionstilstand, der registrerer, hvis brugeren febrilsk trykker på tilbage-knappen. Læs mere for at høre, hvad det gør.

Mens mange læsere af Android-centrerede websteder som vores egen er mindre tilbøjelige til at støde på situationer, hvor en useriøs applikation kompromitterer deres system, er det samme muligvis ikke tilfældet for det generelle befolkning. Næsten hver uge hører vi fra forskellige sikkerhedsforskere om ny malware rettet mod Android-brugere. De fleste af disse ondsindede angreb kan undgås ved at inspicere tilladelser eller undgå at installere skitseagtige programmer, og mens vi anbefaler vores læsere at tage deres telefons sikkerhed i egen hånd, er Google ansvarlig for at sikre enhver Android telefon. Til det formål introducerede virksomheden stille og roligt en ny sikkerhedsfunktion i Android 7.1 Nougat kaldet "panik opdagelse", som lytter efter flere tilbage-knap-tryk efter hinanden, vender derefter brugeren tilbage til deres startskærm.

Ganske enkelt, hvis en useriøs applikation forsøger at kapre brugerens skærm og forhindre brugeren i at forlade (måske ved at implementerer en tilgængelighedstjeneste til at opsnappe alle vigtige begivenheder), vil Android selv tilsidesætte applikationen for at bringe tilbage startskærmen. Brugeren kan derefter formodentlig afinstallere den ondsindede applikation fra launcheren.

Denne funktion fløj under radaren, forståeligt nok, da Google sandsynligvis ikke ønsker at reklamere for verden på én måde, hvorpå de renser ondsindede applikationer. Men et hurtigt kig på Androids åbne kildekode afslører, hvordan denne simple funktion fungerer på de enheder, der understøtter den.


Gennemgang af koden

Først og fremmest, bare fordi din enhed kører Android 7.1+ betyder det ikke, at denne panikregistreringsadfærd faktisk er aktiveret. Værdien, der bestemmer, om funktionen er slået til, kan findes i config.xml fil i SystemUI APK.


<integername="config_backPanicBehavior">0integer>

Som standard er Androids reaktion på paniktryk på tilbage-knappen at gøre ingenting. Hvis heltalsværdien af config_backPanicBehavior er sat til 1, men det er her Androids nye beskyttelsesforanstaltning træder i kraft.

Inden for PhoneWindowManager.java vi kan se hovedparten af, hvordan denne funktion er implementeret. Først og fremmest definerer filen to ting: hvor mange tilbage-knap-tryk, der skal til, for at systemet kan fastslå, at brugeren er i panik, og derefter hvilken handling, der skal tages baseret på denne tilstand.

// 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;

Som standard kræver systemet 4 på hinanden følgende tilbage-knap-tryk for at gå ind i paniktilstand. Hvorvidt funktionen bruger heltalsværdien af PANIC_PRESS_BACK_NOTHING eller PANIC_PRESS_BACK_HOME bestemmes af værdien i konfigurationsfilen i SystemUI APK.

Uanset denne værdi kontrolleres hvert tilbage-knap-multi-tryk for at se, om det vil tælle som et paniktryk. Først opsnapper systemet nedtrykket for KEYCODE_BACK nøglehændelse og kontrollerer, om systemet er indstillet til at tjekke for flere tryk eller lange tryk på tasten. Derefter tjekker systemet, om det skal videregive op-trykket for den samme KEYCODE_BACK-nøglehændelse til brugerappen.

I den interceptBackKeyDown() metode, hvis tælleren for tilbagetasten er mellem 1 og 3, springer systemet over multi-tryk detektions-timeoutet, da panikdetektionen kræver mindst 4 tryk, for at enhver handling skal udføres.

Dernæst, når brugeren fjerner sin finger fra tilbagetasten, som udløser en ophændelse, vil den interceptBackKeyUp tilføjer 1 til tilbagetastetælleren. Den sætter derefter en besked i kø i 300 millisekunder i fremtiden. Årsagen til dette er, at systemet reserverer en forsinkelsesperiode på 300 millisekunder, når det besluttes, om tryk på tilbage-knappen er en del af en multi-press-begivenhed. Hvis det er tilfældet, kan brugeren gå i panik ved at trykke på knappen, så systemet skal ikke sende nøglehændelsen til brugerapplikationen.

Timeoutværdien på 300 ms for flere tryk gemmes i den sikre indstilling "multi_press_timeout" som vist nedenfor.

/**
* 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";

Som standard er denne værdi sat til 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

Så, hvis et multi-tryk faktisk detekteres (>1 tilbage-knap komplet op/ned-tryk inden for 300 ms), kalder systemet backMultiPressAction metode til at bestemme, hvad der skal gøres. Til sidst nulstilles tilbageknappens tæller til 0.

Selvom det er en meget mindre, upubliceret funktion, er det stadig rart at se, hvad Google arbejder på bag kulisserne for at gøre Android mere sikkert for den gennemsnitlige bruger.