Забелязали ли сте, че диалоговият прозорец за сила на звука на вашия Android отнема 20 секунди, за да изчезне, освен ако не докоснете екрана ръчно? Ето защо това се случва.
Забелязали ли сте, че диалоговият прозорец за сила на звука, който се появява, когато натиснете бутоните за сила на звука, отнема малко също дълго да изчезне от само себе си? Когато за първи път получихте телефона си с Android, диалоговият прозорец за сила на звука автоматично щеше да се отхвърли след няколко секунди без вашата намеса. След това, някъде през последните няколко дни, седмици или месеци, ще отнеме много време, за да изчезне, освен ако не докоснете екрана си. Ако изпитвате този проблем и той ви вбесява, не сте сами.
В тази статия ще обясним какво се случва и защо се случва, за да можете или да отстраните проблема сами, или да изпратите тази статия на програмист, за да може той да го поправи. Нека първо опишем точно какъв е проблемът, за да е ясно, че имаме предвид същия проблем, пред който сте изправени.
Проблемът
Натискате бутона за сила на звука на вашия смартфон или таблет с Android, за да промените силата на звука, но силата на звука диалоговият прозорец, който се появява, отнема много време, за да изчезне сам, освен ако не докоснете екрана, за да го направите изчезва. Колко дълго остава диалоговият прозорец за сила на звука сам? Точно 20 секунди.
Кредити: /u/ConeCandy
Популярна тема в /r/ на RedditGooglePixel subreddit имаше много потребители, които казаха, че са изправени пред този проблем. Не всеки обаче имаше този проблем. Някои потребители заявиха, че техните диалози за сила на звука остават на екрана само за 3 секунди, което е нормалното поведение. И така, какво причинява този проблем? За повечето потребители в тази нишка се оказва, че причината е приложение, наречено Signal Spy - въпреки че някои потребители в тази нишка казаха, че други приложения също причиняват това поведение.
Цена: Безплатно.
3.9.
Signal Spy е приложение, което е популярно сред абонатите на услугата Project Fi на Google. Потребителите на Project Fi харесват приложението, защото поддържа анализиране на текущата ви мрежова свързаност и поддържа автоматично превключване между Sprint и T-Mobile. Най-добрата част? Не се нуждае от root достъп за превключване между мрежите. Signal Spy използва услуга за достъпност (услуга, която използва API за достъпност на Android, които обикновено се използват за подпомагане на потребителите с увреждания, но се използват и в стотици обикновени приложения) за автоматично превключване между оператори чрез въвеждане на код за набиране преки пътища.
Способността на Signal Spy автоматично да превключва между оператори на Project Fi е невероятно полезна, но това е и причината да се появява проблемът с диалоговия прозорец за обем на Android. Единствената обща черта между Signal Spy и другите приложения като LastPass, Fingerprint Gestures, Zoho Vault, Amazon Assistant и други приложения, които причиняват този проблем, е, че те използвайте услуга за достъпност. Отиването на Настройки --> Достъпност и изключването на всяка услуга за достъпност една по една е един от начините за решаване на този проблем. Защо тогава само услугите за достъпност на някои приложения причиняват този проблем? Tasker, например, не се сблъсква с този проблем, както и нашия собствен Жестове за навигация ап. Вие и много други на Google Issue Tracker може да мисли, че е грешка, но всъщност не е - това е изцяло по дизайн.
Обяснението
Както открихме по време на разработването на приложението Navigation Gestures, проблемът възниква, когато услуга за достъпност има accessibilityFeedbackType настроен на нещо различно от FEEDBACK_GENERIC. Когато настроим нашата услуга за достъпност да използва FEEDBACK_HAPTIC, диалоговият прозорец за сила на звука ще остане на екрана за 20 секунди. Когато го зададем на FEEDBACK_GENERIC, диалоговият прозорец за сила на звука остава на екрана за 3 секунди.
Причината за това се случва поради два метода в обемна диалогова реализация в AOSP. Първият метод, наречен computeFeedbackEnabled, проверява дали има активирани услуги за достъпност, които са „негенерични“. Ако е true, тогава булевият mFeedbackEnabled е зададен на true. Във втория метод, computeTimeoutH, ако mFeedbackEnabled върне true, тогава времето за изчакване на диалоговия прозорец за обем е зададено на 20 секунди, в противен случай е зададено на 3 секунди.
Тезиметоди бяха добавени в версията на Android 6.0 Marshmallow и по този начин този проблем с диалоговия прозорец за сила на звука засяга всички версии на Android след Android Marshmallow, включително Android Nougat, Android Oreo и Android Pie. Не сме напълно сигурни защо тези методи бяха добавени, тъй като описанията на ангажиментите не бяха ясни. Ако трябва да рискувам да предположа защо съществува това поведение, бих казал, че е да помогне на потребителите с определени уврежданията обработват диалоговия прозорец за сила на звука с глас или други входове, тъй като времето за изчакване от 3 секунди по подразбиране е твърде кратко за тях. Ако Android установи, че даден потребител използва услуга за достъпност от определен тип, той автоматично удължава престоя на диалоговия прозорец за обем, така че потребителят да има по-добър шанс да взаимодейства с него. Независимо от това, ясно е, че този проблем е не е грешка но е по-скоро изцяло по дизайн. За съжаление, това означава, че няма "поправка" за проблема извън убеждаването на Google да промени това решение или да убеди разработчиците на приложения да не използват негенерични типове обратна връзка в своята Достъпност Услуги.
Разработчиците на Signal Spy вече потвърдиха, че са коригирали проблема в следващата си бета версия, така че ако срещнете проблема и искате да видите дали е коригиран, трябва да насочи разработчиците на приложения към тази статия, така че да са наясно с проблема (тъй като мнозина не са наясно.) Ако бъдеща версия на Android промени това поведение, ще ви позволим на всички зная. Поне вече сте наясно с този проблем и какво го причинява, така че да разберете кои приложения ви причиняват този проблем.