Як автоматично вимкнути попередження про велику гучність без Root

Навчальний посібник щодо того, як вимкнути попередження про велику гучність або безпечний звук, які є обов’язковими на пристроях, що продаються в ЄС. Це працює на всіх пристроях без root.

Ті з вас, хто живе в одній із країн-членів Європейського Союзу, ймовірно, стикалися з попередженням, намагаючись збільшити гучність навушників, як показано на зображенні вище.

Відповідно до норм, встановлених Європейським комітетом з електротехнічної стандартизації (CENELEC), усі електронні пристрої з можливістю відтворення мультимедійних даних, продані після лютого 2013 року, повинні мати вихідний рівень гучності за замовчуванням максимум 85 дБ. Користувачі можуть змінити попередження, щоб збільшити гучність до максимум 100 дБ, але при цьому попередження має з’явитися знову після 20 годин відтворення музики.

Хоча ми не збираємося вдаватися в дискусію про ефективність цього положення в сприянні доброму здоров'я, користувачі, які часто обходять це попередження, часто задаються питанням, чи можливий цей процес автоматизований. Є багато випадків, коли доволі неприємно вручну погоджуватися на перевизначення обмеження гучності, наприклад, коли ви починаєте віддаленого відтворення музики на пристрої Bluetooth, тому ми хотіли знайти спосіб автоматичного обходу цього УВАГА.

Рішення для обходу «безпечного обмеження обсягу» вже існують, якщо ви шукаєте на наших форумах, але наразі всі рішення вимагали від вас встановити Xposed Модуль. Це обов’язково обмежує, хто може ним користуватися, оскільки Xposed Framework вимагає від вас кореневого доступу (що означає розблокований завантажувач на більшості телефонів), а також використання версій Android до Nougat. Але після копання в AOSP і різних системних налаштуваннях я знайшов спосіб обійти обмеження високої гучності/безпечного звуку на всіх пристроях, не вимагаючи root.

Дотримуючись цього посібника, ви приймаєте будь-які ризики, пов’язані з прослуховуванням медіафайлів на високій гучності.


Навчальний посібник із обходу безпечного звукового попередження

Якщо ви читали мою попередню статтю про увімкнення режиму занурення без кореневого доступу, то ви, можливо, почали грати з деякими налаштуваннями, які ви можете знайти прихованими на своєму телефоні. Якщо ви цього не зробили, я настійно рекомендую вам це зробити, оскільки я виявив, що майже кожен пристрій має масу корисних речей, які тільки й чекають свого відкриття. Цей трюк нічим не відрізняється, оскільки ми використовуватимемо властивість системи, щоб обійти безпечне звукове попередження.

Зокрема, ми будемо модифікувати Систему. Глобальна власність audio_safe_volume_state як під час завантаження, так і періодично, тому Android завжди вважатиме, що ви погодилися обійти попередження. Ця властивість є визначено в AOSP, який ми відтворюємо нижче. Є кілька станів, які може прийняти ця властивість, у діапазоні від 0-3. Через 30 секунд після завантаження або кожні 20 годин безперервного відтворення музики стан установлюється на «0» або «не налаштовано». Потім встановлюється значення «1» для «вимкнено» або «3» для «ввімкнено» залежно від вашого Мобільний код країни. Якщо ви живете в ЄС, ця властивість має значення «3» за замовчуванням, але змінюється на «2» для «неактивного» щоразу, коли користувач вручну обходить попередження про гучність. Ми змінимо значення цієї властивості на «неактивний» стан (якщо вам цікаво, зміна на «вимкнено» ніколи не працювала для мене).


//
// Safe media volume management.
// MUSIC stream volume level is limited when headphones are connected according to safety
// regulation. When the user attempts to raise the volume above the limit, a warning is
// displayed and the user has to acknowlegde before the volume is actually changed.
// The volume index corresponding to the limit is stored in config_safe_media_volume_index
// property. Platforms with a different limit must set this property accordingly in their
// overlay.
//
// mSafeMediaVolumeState indicates whether the media volume is limited over headphones.
// It is SAFE_MEDIA_VOLUME_NOT_CONFIGURED at boot time until a network service is connected
// or the configure time is elapsed. It is then set to SAFE_MEDIA_VOLUME_ACTIVE or
// SAFE_MEDIA_VOLUME_DISABLED according to country option. If not SAFE_MEDIA_VOLUME_DISABLED, it
// can be setto SAFE_MEDIA_VOLUME_INACTIVE bycalling AudioService.disableSafeMediaVolume()
// (when user opts out).
privatefinalint SAFE_MEDIA_VOLUME_NOT_CONFIGURED = 0;
privatefinalint SAFE_MEDIA_VOLUME_DISABLED = 1;
privatefinalint SAFE_MEDIA_VOLUME_INACTIVE = 2;
privatefinalint SAFE_MEDIA_VOLUME_ACTIVE = 3;
private Integer mSafeMediaVolumeState;
privateint mMcc = 0;
// mSafeMediaVolumeIndex is the cached value of config_safe_media_volume_index property
privateint mSafeMediaVolumeIndex;
// mSafeMediaVolumeDevices lists the devices for which safe media volume is enforced,
privatefinalint mSafeMediaVolumeDevices = AudioSystem.DEVICE_OUT_WIRED_HEADSET |
AudioSystem.DEVICE_OUT_WIRED_HEADPHONE;
// mMusicActiveMs is the cumulative time of music activity since safe volume was disabled.
// When this time reaches UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX, the safe media volume is re-enabled
// automatically. mMusicActiveMs is rounded to a multiple of MUSIC_ACTIVE_POLL_PERIOD_MS.
privateint mMusicActiveMs;
privatestaticfinalint UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX = (20 * 3600 * 1000); // 20 hours
privatestaticfinalint MUSIC_ACTIVE_POLL_PERIOD_MS = 60000; // 1 minute polling interval
privatestaticfinalint SAFE_VOLUME_CONFIGURE_TIMEOUT_MS = 30000; // 30s after boot completed

читати далі

Спочатку потрібно встановити Tasker і AutoTools тому ми можемо автоматизувати цей трюк. Технічно можна використовувати будь-яку іншу програму автоматизації, окрім Tasker, але я знайомий лише з Tasker, тому вам доведеться самостійно вносити зміни, якщо ви віддаєте перевагу використанню іншої програми. Однак AutoTools має вирішальне значення для цього трюку, оскільки цей плагін дозволить нам контролювати налаштування безпеки на нашому пристрої.

Як пояснювалося в моїй статті про перемикання режиму занурення, нам потрібно надати WRITE_SECURE_SETTINGS дозвіл на AutoTools. Це пояснюється тим, що команда для керування безпечним станом гучності аудіо визначена під Налаштування. Глобальний класу, хоча точний синтаксис команди приховано в AOSP (так само, як це було для режиму занурення). Якщо ви вже надали дозвіл WRITE_SECURE_SETTINGS для AutoTools після того, як прочитали мій попередній посібник із режиму занурення, ви можете пропустити наступний розділ. Якщо ні, то вам доведеться його налаштувати.


У системі керування дозволами Android програми визначають дозволи, які вони хочуть отримати, у файлі маніфесту. Потім користувачі можуть надавати або забороняти дозволи під час інсталяції (до Marshmallow) або за запитом (Marshmallow+). Однак існують певні дозволи, які не можна надати програмам, навіть якщо вони запитують це в Маніфесті, наприклад WRITE_SECURE_SETTINGS. Це пояснюється тим, що надання будь-якій програмі настільки потужного дозволу дасть цій програмі масу контролю над вашим пристроєм.

Але є один обхідний шлях, який ми можемо використати, щоб надати дозвіл WRITE_SECURE_SETTINGS будь-якій програмі, яку ми хочемо. За допомогою ADB менеджер пакунків (пм) ми можемо надати будь-який дозвіл будь-якій програмі, яку ми хочемо (за умови, що програма запитує цей дозвіл у файлі маніфесту).

Перше, що вам потрібно зробити, це інсталюйте двійковий файл ADB на ваш комп’ютер, а потім правильний драйвер для вашого пристрою. Потім увімкніть налагодження USB у параметрах розробника (перейдіть у «Параметри» --> «Про телефон» і торкніться «Номер збірки» 7 разів, якщо ви цього ще не зробили) і підключіть телефон до комп’ютера. Нарешті, надішліть наступну команду, коли ви відкриєте термінал:

adb shell pm grant com.joaomgcd.autotools android.permission.WRITE_SECURE_SETTINGS

Тепер AutoTools матиме можливість змінювати будь-які глобальні, безпечні чи системні налаштування на вашому пристрої. Існують різні способи використання цих налаштувань і списку доступних налаштувань кожна категорія повністю залежить від вашого пристрою та збірки програмного забезпечення, але це обговорення для іншого час. У будь-якому випадку ми підемо далі і покажемо вам, як використовувати AutoTools для керування безпечним станом гучності.


Вимкнення безпечного звукового попередження під час завантаження

Ось опис профілю для тих із вас, хто знайомий із Tasker. Якщо ви не знайомі з Tasker, читайте далі, щоб отримати покрокові інструкції.

Вимкніть Safe Audio під час завантаження

Profile: Disable Safe Audio On Boot (6)
Event: Monitor Start
Enter: Anon (7)
A1: Wait[ MS: 0 Seconds: 30 Minutes: 0 Hours: 0 Days: 0 ]
A2: AutoTools Secure Settings [ Configuration: Setting Type: Global
Name: audio_safe_volume_state
Input Type: Int
Value: 2 Timeout (Seconds):60 ]

читати далі

Відкрийте Tasker, щоб ми могли створити новий профіль. У нижньому правому куті торкніться значка + щоб створити новий профіль. Додайте новий Подія контекст і перейдіть до Tasker --> Monitor Start. Ми використовуємо цей контекст події, який запускається під час запуску Tasker, а не контекст події, який активується під час завантаження телефону, оскільки перший набагато надійніший, ніж другий.

У будь-якому випадку натисніть кнопку «Назад», оскільки ми створимо завдання, пов’язане з цим профілем. Назвіть Завдання як завгодно, оскільки це не має значення. Коли ви перейдете на екран створення завдання, натисніть на + унизу посередині екрана, щоб створити нову дію. Для першої дії перейдіть до Завдання --> Зачекайте і нехай це чекає 30 секунд. Це пояснює правило «30 секунд після завантаження», яке використовується в Android для встановлення безпечного стану гучності.

Далі створіть нову дію та перейдіть до Плагін --> AutoTools --> Secure Settings. Натисніть олівець, щоб відкрити екран конфігурації AutoTools. Йти до Спеціальне налаштування. Для типу налаштування введіть Глобальний. Для Ім'я введіть audio_safe_volume_state. Зробіть це для типу введення внутр. Зробіть це заради цінності 2. Переконайтеся, що ви все встановили правильно, конфігурація має відповідати середньому знімку екрана нижче. Команда повинна бути відправлена точно як я написав, інакше це не вплине.

Коли ви закінчите, поверніться до головного меню Tasker, оскільки нам потрібно буде створити інший профіль. Той, який ми щойно створили, враховує, коли безпечний стан тома встановлено через 30 секунд після завантаження, але для для тих із вас, хто майже ніколи не перезавантажує свій пристрій, ми створимо інший профіль, щоб періодично встановлювати це значення.


Періодично вимикайте попередження про безпечний звук

Ось опис профілю для тих із вас, хто знайомий із Tasker. Якщо ви не знайомі з Tasker, читайте далі, щоб отримати покрокові інструкції.

Періодично вимикайте Safe Audio

Profile: Disable Safe Audio Periodically (21)
Time: 11:59PM
Enter: Anon (122)
A1: AutoTools Secure Settings [ Configuration: Setting Type: Global
Name: audio_safe_volume_state
Input Type: Int
Value: 2 Timeout (Seconds):60 ]

читати далі

Створіть новий профіль, цього разу з a час контекст. На жаль, я не знаю жодного способу отримати поточний сукупний час відтворення медіа без root, тому ми натомість будемо періодично встановлювати безпечний стан тома на неактивний кожні 24 години (... це не те, що ви, хлопці, насправді слухаєте 20 годин музики протягом 24 годин, правда?). У будь-якому випадку, інтерфейс Tasker для встановлення періодичного завдання є жахливим, але суть його полягає в тому, що ви хочете встановити час «Від» і «До» на той самий час. Таким чином, Tasker розглядатиме це так, ніби ви хочете, щоб завдання запускалося лише один раз у встановлений час (я зробив це за 1 хвилину до півночі).

Що стосується завдання, просто скопіюйте те, що ви зробили для дії №2 у попередньому профілі. У цьому випадку немає нової або іншої дії, оскільки все, що ми робимо, це змінюємо значення цієї глобальної системної властивості раз на 24 години.

Тепер, коли ви налаштували обидва ці профілі, ви готові! Перезавантажте телефон і тепер ви більше не повинні бачити попередження про «безпечну гучність», коли підключаєте навушники.


Завантажте та імпортуйте в Tasker

Як завжди, ми надаємо XML-файл сценаріїв, який ви можете завантажити та імпортувати. Просто завантажте файли за посиланням нижче та збережіть їх будь-де у внутрішній пам’яті. Відкрийте Tasker і вимкніть режим для початківців у налаштуваннях. Потім поверніться на головний екран і натисніть і утримуйте вкладку «Профіль» угорі. Ви повинні побачити спливаюче вікно з одним із варіантів «Імпорт». Торкніться цього та знайдіть місце, де ви зберегли файли .prf.xml, і виберіть цей файл для імпорту. Повторіть для другого профілю.

Завантажте профіль «Вимкнути попередження безпечного аудіо під час завантаження».

Завантажте профіль «Періодично вимикати попередження про безпечний звук».

Сподіваємось, ця порада буде для вас корисною. Повідомте нам у коментарях нижче, чи це працює для вас!