Android Nougat-ს (7.1+) აქვს პანიკის გამოვლენის რეჟიმი, რომელიც აღმოაჩენს, აჭერს თუ არა მომხმარებელი სასტიკად უკანა ღილაკს. წაიკითხეთ მეტი, რომ გაიგოთ რას აკეთებს.
მიუხედავად იმისა, რომ Android-ზე ორიენტირებული ვებსაიტების ბევრი მკითხველი, როგორიცაა ჩვენი, ნაკლებად სავარაუდოა სიტუაციებში, როდესაც თაღლითური აპლიკაცია კომპრომეტირებს მათ სისტემას, იგივე შეიძლება არ იყოს მართალი გენერალისთვის მოსახლეობა. თითქმის ყოველ კვირას გვესმის უსაფრთხოების სხვადასხვა მკვლევარებისგან ახალი მავნე პროგრამების შესახებ, რომლებიც მიზნად ისახავს Android-ის მომხმარებლებს. ამ მავნე თავდასხმების უმეტესობის თავიდან აცილება შესაძლებელია ნებართვების შემოწმებით ან ესკიზური აპლიკაციების ინსტალაციის თავიდან აცილებით, და მიუხედავად იმისა, რომ ჩვენ რეკომენდაციას ვუწევთ ჩვენს მკითხველს, ხელში აიღონ ტელეფონის უსაფრთხოება, Google პასუხისმგებელია ყველა Android-ის დაცვაზე ტელეფონი. ამ მიზნით, კომპანიამ ჩუმად შემოიტანა ახალი უსაფრთხოების ფუნქცია Android 7.1 Nougat-ში სახელწოდებით "პანიკის გამოვლენა" რომელიც უსმენს უკანა ღილაკების რამდენიმე დაჭერას თანმიმდევრულად, შემდეგ აბრუნებს მომხმარებელს მთავარ ეკრანზე.
უბრალოდ, თუ თაღლითი აპლიკაციები შეეცდებიან გაიტაცეს მომხმარებლის ეკრანი და ხელი შეუშალოს მომხმარებლის წასვლას (ალბათ ხელმისაწვდომობის სერვისის დანერგვით ყველა საკვანძო მოვლენის ჩასაჭრელად), ანდროიდი თავისთავად გადალახავს აპლიკაციას, რათა დააბრუნოს იგი საწყისი ეკრანი. ამის შემდეგ მომხმარებელს, სავარაუდოდ, შეუძლია მავნე აპლიკაციის დეინსტალაცია გამშვებიდან.
ეს ფუნქცია გაფრინდა რადარის ქვეშ, გასაგებია, რომ 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";
ნაგულისხმევად, ეს მნიშვნელობა დაყენებულია 300 ms.
/**
* 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 უფრო უსაფრთხო გახდეს საშუალო მომხმარებლისთვის.