როგორ ავტომატურად გამორთოთ მაღალი მოცულობის გაფრთხილება Root-ის გარეშე

გაკვეთილი იმის შესახებ, თუ როგორ უნდა გამორთოთ მაღალი მოცულობის ან უსაფრთხო აუდიო გაფრთხილება, რომელიც საჭიროა E.U-ში გაყიდულ მოწყობილობებზე. ეს მუშაობს ყველა მოწყობილობაზე root გარეშე.

თქვენ, ვინც ცხოვრობს ევროკავშირის ერთ-ერთ წევრ ქვეყანაში, ალბათ წააწყდა გაფრთხილებას ყურსასმენის ხმის აწევის მცდელობისას, როგორც ეს ნაჩვენებია ზემოთ მოცემულ სურათზე.

ევროპული ელექტროტექნიკური სტანდარტიზაციის კომიტეტის (CENELEC) მიერ დადგენილი რეგულაციების მიხედვით, ყველა ელექტრონული მოწყობილობები, რომლებსაც შეუძლიათ მედიის დაკვრა, გაყიდული 2013 წლის თებერვლის შემდეგ, უნდა ჰქონდეთ ნაგულისხმევი გამომავალი ხმის დონე მაქსიმუმ 85 დბ. მომხმარებლებს შეუძლიათ აირჩიონ გაფრთხილების უგულებელყოფა ხმის გაზრდის მაქსიმუმ 100 დბ-მდე, მაგრამ ამით გაფრთხილება ხელახლა უნდა გამოჩნდეს მუსიკის დაკვრის 20 საათის შემდეგ.

მიუხედავად იმისა, რომ ჩვენ არ ვაპირებთ დებატებში ამ რეგულაციის ეფექტურობის პოპულარიზაციაში ჯანმრთელობა, მომხმარებლები, რომლებიც ხშირად ირჩევენ ამ გაფრთხილების გვერდის ავლით, ხშირად აინტერესებთ, შეიძლება თუ არა ეს პროცესი ავტომატიზირებული. არის ბევრი შემთხვევა, როდესაც საკმაოდ შემაშფოთებელია ხელით დათანხმება მოცულობის ლიმიტის გადალახვაზე, მაგალითად, როდესაც დაიწყებთ მუსიკის დაკვრა დისტანციურად Bluetooth მოწყობილობაზე, ამიტომ გვინდოდა შეგვედგინა გზა ამის ავტომატურად გვერდის ავლით გაფრთხილება.

გადაწყვეტილებები "უსაფრთხო მოცულობის ლიმიტის" გვერდის ავლით უკვე არსებობს, თუ ჩვენს ფორუმებს მოძებნით, მაგრამ ჯერჯერობით ყველა გადაწყვეტა მოგთხოვთ დაინსტალირება Xposed მოდული. ეს აუცილებლად ზღუდავს ვის შეუძლია მისი გამოყენება, რადგან Xposed Framework მოითხოვს, რომ გქონდეთ root წვდომა (რაც ნიშნავს განბლოკილ ჩამტვირთველს ტელეფონების უმეტესობაზე) და ასევე იყოთ Android-ის Nougat-ის წინა ვერსიებზე. მაგრამ AOSP-ში და სხვადასხვა სისტემის პარამეტრებში ჩაღრმავების შემდეგ, მე აღმოვაჩინე გზა მაღალი ხმის/უსაფრთხო აუდიო ლიმიტის გვერდის ავლით. ყველა მოწყობილობაზე root-ის საჭიროების გარეშე.

ამ სახელმძღვანელოს მიყოლებით თქვენ იღებთ ნებისმიერ რისკს, რომელიც დაკავშირებულია მედიის მაღალ ხმაზე მოსმენასთან.


უსაფრთხო აუდიო გაფრთხილების შემოვლითი გაკვეთილი

თუ წაიკითხეთ ჩემი წინა სტატია იმერსიული რეჟიმის ჩართვა 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

წაიკითხე მეტი

ჯერ დაგჭირდებათ ინსტალაცია ტასკერი და AutoTools ასე რომ, ჩვენ შეგვიძლია ამ ხრიკის ავტომატიზაცია. ტექნიკურად, Tasker-ის გარდა ნებისმიერი სხვა ავტომატიზაციის აპლიკაციის გამოყენება შესაძლებელია, მაგრამ მე მხოლოდ Tasker-ს ვიცნობ, ასე რომ თქვენ მოგიწევთ დამოუკიდებლად განახორციელოთ კორექტირება, თუ გსურთ გამოიყენოთ სხვა აპლიკაცია. თუმცა, AutoTools გადამწყვეტია ამ ხრიკისთვის, რადგან ეს დანამატი საშუალებას მოგვცემს გავაკონტროლოთ უსაფრთხო პარამეტრები ჩვენს მოწყობილობაზე.

როგორც ახსნილია ჩემს სტატიაში იმერსიული რეჟიმის გადართვის შესახებ, ჩვენ უნდა მივცეთ ის WRITE_SECURE_SETTINGS AutoTools-ის ნებართვა. ეს იმიტომ ხდება, რომ ბრძანება უსაფრთხო აუდიო მოცულობის მდგომარეობის გასაკონტროლებლად არის განსაზღვრული ქვეშ პარამეტრები. გლობალური კლასი, თუმცა ბრძანების ზუსტი სინტაქსი დამალულია AOSP-ში (ისევე, როგორც ეს იყო იმერსიული რეჟიმისთვის). თუ თქვენ უკვე მიანიჭეთ WRITE_SECURE_SETTINGS ნებართვა AutoTools-ს მას შემდეგ, რაც წაიკითხეთ ჩემი წინა გაკვეთილი Immersive Mode-ზე, მაშინ შეგიძლიათ გამოტოვოთ შემდეგი სექცია. თუ არა, მაშინ მოგიწევთ მისი დაყენება.


Android-ის ნებართვების მართვის სისტემის მიხედვით, აპლიკაციები განსაზღვრავენ ნებართვებს, რომელთა მინიჭებაც სურთ Manifest ფაილში. შემდეგ მომხმარებლებს შეუძლიათ მიანიჭონ ან უარყონ ნებართვები ინსტალაციაზე (წინასწარ Marshmallow) ან მოთხოვნით (Marshmallow+). თუმცა, არსებობს გარკვეული ნებართვები, რომ განაცხადების მინიჭება შეუძლებელია მაშინაც კი, თუ ისინი ამას მოითხოვენ მანიფესტში, როგორიცაა WRITE_SECURE_SETTINGS. ეს იმიტომ ხდება, რომ ნებისმიერი აპლიკაციის ასეთი ძლიერი ნებართვის მინიჭება ამ აპს თქვენს მოწყობილობაზე უამრავ კონტროლს მისცემს.

მაგრამ არის ერთი გამოსავალი, რომელიც ჩვენ შეგვიძლია გამოვიყენოთ WRITE_SECURE_SETTINGS ნებართვის მისაცემად ნებისმიერ ჩვენთვის საჭირო აპისთვის. ADB-ის გამოყენებით პაკეტის მენეჯერი (pm) ინსტრუმენტი, ჩვენ შეგვიძლია მივცეთ ნებისმიერი ნებართვა ნებისმიერ აპლიკაციას, რომელიც ჩვენ გვინდა (იმ პირობით, რომ აპლიკაცია ითხოვს ამ ნებართვას Manifest ფაილში).

პირველი რაც თქვენ უნდა გააკეთოთ არის დააინსტალირეთ ADB ორობითი თქვენს კომპიუტერზე, რასაც მოჰყვება სწორი დრაივერი თქვენი მოწყობილობისთვის. შემდეგ, ჩართეთ USB Debugging დეველოპერის ოფციებში (გადადით პარამეტრებში --> ტელეფონის შესახებ და შეეხეთ Build ნომერს 7-ჯერ, თუ ჯერ არ გაგიკეთებიათ) და დაუკავშირეთ თქვენი ტელეფონი თქვენს კომპიუტერს. და ბოლოს, გაგზავნეთ შემდეგი ბრძანება ტერმინალის გახსნის შემდეგ:

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

ახლა AutoTools-ს ექნება შესაძლებლობა შეცვალოს ნებისმიერი გლობალური, უსაფრთხო ან სისტემის პარამეტრი თქვენს მოწყობილობაზე. არსებობს სხვადასხვა გზა, რომლითაც შეგიძლიათ ითამაშოთ ამ პარამეტრებით და ხელმისაწვდომი პარამეტრების სიაში თითოეული კატეგორია მთლიანად დამოკიდებულია თქვენს მოწყობილობასა და პროგრამული უზრუნველყოფის კონსტრუქციაზე, მაგრამ ეს განხილვა სხვაზეა დრო. ნებისმიერ შემთხვევაში, ჩვენ გავაგრძელებთ გაჩვენებთ, თუ როგორ გამოიყენოთ AutoTools უსაფრთხო ხმის მდგომარეობის გასაკონტროლებლად.


ჩატვირთვისას უსაფრთხო აუდიო გაფრთხილების გამორთვა

აქ არის პროფილის აღწერა მათთვის, ვინც იცნობს Tasker-ს. თუ არ იცნობთ Tasker-ს, წაიკითხეთ ნაბიჯ-ნაბიჯ ინსტრუქციები.

გამორთეთ უსაფრთხო აუდიო ჩატვირთვისას

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 --> მონიტორის დაწყება. ჩვენ ვიყენებთ ამ ღონისძიების კონტექსტს, რომელიც ამოქმედდება Tasker-ის გაშვებისას, ვიდრე ღონისძიების კონტექსტს, რომელიც აქტიურდება ტელეფონის ჩატვირთვისას, რადგან პირველი ბევრად უფრო საიმედოა, ვიდრე მეორე.

ნებისმიერ შემთხვევაში, დააჭირეთ უკანა ღილაკს, რადგან ჩვენ შევქმნით ამ პროფილთან დაკავშირებულ ამოცანას. დაასახელეთ ამოცანა, რადგან არ აქვს მნიშვნელობა. როგორც კი შეხვალთ დავალების შექმნის ეკრანზე, დააჭირეთ ღილაკს + ხატულა ეკრანის ქვედა შუაში ახალი მოქმედების შესაქმნელად. პირველი მოქმედებისთვის გადადით ამოცანა --> დაელოდეთ და დაელოდე 30 წამი. ეს ითვალისწინებს „ჩატვირთვის შემდეგ 30 წამის“ წესს, რომელიც გამოიყენება Android-ში უსაფრთხო მოცულობის მდგომარეობის დასაყენებლად.

შემდეგი, შექმენით ახალი მოქმედება და გადადით დანამატი --> ავტომატური ხელსაწყოები --> უსაფრთხო პარამეტრები. დააჭირეთ ფანქარს AutoTools-ის კონფიგურაციის ეკრანის გასახსნელად. Წადი მორგებული პარამეტრი. პარამეტრის ტიპისთვის შეიყვანეთ გლობალური. სახელისთვის შეიყვანეთ audio_safe_volume_state. შეყვანის ტიპისთვის გააკეთეთ იგი ინტ. ღირებულებისთვის გააკეთე ის 2. შეამოწმეთ, რომ ყველაფერი სწორად დააყენეთ, კონფიგურაცია უნდა შეესაბამებოდეს ქვემოთ მოცემულ შუა ეკრანის სურათს. ბრძანება უნდა გაიგზავნოს ზუსტად როგორც დავწერე, ან არ ექნება რაიმე გავლენა.

როგორც კი დაასრულებთ, გადადით Tasker-ის მთავარ მენიუში, რადგან დაგვჭირდება სხვა პროფილის შექმნა. ის, რომელიც ჩვენ ახლახან შევქმენით, ემსახურება, როდესაც უსაფრთხო მოცულობის მდგომარეობა დაყენებულია ჩატვირთვის შემდეგ 30 წამის შემდეგ ისინი, ვინც თითქმის არასოდეს გადატვირთავთ თქვენს მოწყობილობას, ჩვენ გავაკეთებთ სხვა პროფილს, რომ პერიოდულად დააყენოთ ეს ღირებულება.


პერიოდულად გამორთეთ უსაფრთხო აუდიო გაფრთხილება

აქ არის პროფილის აღწერა მათთვის, ვინც იცნობს Tasker-ს. თუ არ იცნობთ Tasker-ს, წაიკითხეთ ნაბიჯ-ნაბიჯ ინსტრუქციები.

პერიოდულად გამორთეთ უსაფრთხო აუდიო

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-ის ინტერფეისი პერიოდული დავალების დასაყენებლად რაღაცნაირი საშინელია, მაგრამ მისი არსი ის არის, რომ გსურთ დააყენოთ "From" და "To" დრო ერთსა და იმავე დროს. ამ გზით, Tasker მოექცევა მას ისე, როგორც გინდათ, რომ Task მხოლოდ ერთხელ ამოქმედდეს დადგენილ დროს (მე ეს გავაკეთე შუაღამემდე 1 წუთით ადრე).

რაც შეეხება ამოცანას, უბრალოდ დააკოპირეთ ის, რაც გააკეთეთ ქმედება #2-ისთვის წინა პროფილში. ამ შემთხვევაში ახალი ან განსხვავებული მოქმედება არ არის, რადგან ყველაფერი, რასაც ჩვენ ვაკეთებთ, არის 24 საათში ერთხელ ამ გლობალური სისტემის თვისების მნიშვნელობის შეცვლა.

ახლა, როდესაც თქვენ დააყენეთ ორივე პროფილი, დაასრულეთ! გადატვირთეთ თქვენი ტელეფონი და ახლა აღარ უნდა ნახოთ "უსაფრთხო ხმის" გაფრთხილება ყურსასმენების ჩართვისას.


ჩამოტვირთეთ და იმპორტი Tasker-ში

როგორც ყოველთვის, ჩვენ გთავაზობთ სკრიპტების XML ფაილს, რომლის ჩამოტვირთვა და იმპორტი შეგიძლიათ. უბრალოდ ჩამოტვირთეთ ფაილები ქვემოთ მოცემული ბმულიდან და შეინახეთ სადმე თქვენს შიდა მეხსიერებაში. გახსენით Tasker და გამორთეთ დამწყებ რეჟიმი პრეფერენციებში. შემდეგ, დაბრუნდით მთავარ ეკრანზე და დიდხანს დააჭირეთ "პროფილის" ჩანართს ზემოთ. თქვენ უნდა ნახოთ ამომხტარი ფანჯარა, სადაც ერთ-ერთი ვარიანტია "იმპორტი". შეეხეთ მასზე და დაათვალიერეთ სად შეინახეთ .prf.xml ფაილები და აირჩიეთ ეს ფაილი იმპორტისთვის. გაიმეორეთ მეორე პროფილისთვის.

ჩამოტვირთეთ "გათიშეთ უსაფრთხო აუდიო გაფრთხილება ჩატვირთვისას" პროფილი

ჩამოტვირთეთ "უსაფრთხო აუდიო გაფრთხილების პერიოდულად გამორთვა" პროფილი

ვიმედოვნებთ, რომ ეს რჩევა თქვენთვის სასარგებლო იქნება. შეგვატყობინეთ ქვემოთ მოცემულ კომენტარებში, თუ ეს თქვენთვის მუშაობს!