Ny historie

Denne ulovlige Android hack vil gøre dig til en bedre forælder

ved Sergei Shaikin14m2025/04/16
Read on Terminal Reader

For langt; At læse

Digital Sleep Paradox er et problem, ingen taler om. Millioner falder i søvn til YouTube-videoer, podcasts eller streaming apps. Jeg byggede et script, der opretter forbindelse til din Android-enhed trådløst og holder øje med dens lydstyrke.
featured image - Denne ulovlige Android hack vil gøre dig til en bedre forælder
Sergei Shaikin HackerNoon profile picture

Disclaimer: Denne artikel er kun til uddannelsesmæssige formål. bryd ikke loven, vær venlig over for dine børn, og glem ikke, at du er ansvarlig for, hvad du gør med dine egne enheder.

Disclaimer: Denne artikel er kun til uddannelsesmæssige formål. bryd ikke loven, vær venlig over for dine børn, og glem ikke, at du er ansvarlig for, hvad du gør med dine egne enheder.

Det problem ingen taler om

I en tid, hvor skærme dominerer sengetid rutiner, millioner nu falder i søvn til YouTube videoer, podcasts, eller streaming apps.



Men denne vane har en skjult pris: ukontrolleret volumeneksponering, især for børn.Som forælder og udvikler, stod jeg over for dette problem fra første hånd - mit barns sent-nat YouTube binges førte til rastløs søvn og morgen irritabilitet.


Free apps i Google Play Store, som Volume Limiter, Volume Control var en fiasko: de styrtede ned, havde ingen indstillinger, eller var for påtrængende. Måske kommercielle apps ville være bedre, men jeg har testet dette, da de kostede penge, ofte ganske lidt.

The Hack (Totalt ulovligt...ish)

Jeg har opbygget et script, der opretter forbindelse til din Android-enhed trådløst og holder øje med dens lydstyrke.Hvis det bliver for højt - det sænker det forsigtigt.


Ja, teknisk set bruger den ADB (Android Debug Bridge) over Wi-Fi, som er et udviklerværktøj og ikke beregnet til bedtime forældre.

Indstilling af dit udviklingsmiljø

At oprette et udviklingsmiljø og konnektivitet er afgørende, før du dykker ind i koden. Dette vil sikre, at du har alle de nødvendige værktøjer og biblioteker, der strømliner udviklingen.


Jeg bruger macOS, så alle eksempler i historien vil være med dette system, men ved hjælp af Windows gør processen ikke meget vanskeligere i forhold til macOS. Den eneste forskel er, at i macOS-operativsystemet, Python er allerede installeret, og i Windows, skal du installere Python selv herfra: Windows Python

Her er en mere detaljeret opdeling:

  1. Download and Extract Platform Tools:

    1. Go to the official Android Developers website:

      1. Navigate to Android SDK Platform-Tools.
    2. Download the SDK Platform Tools:

      1. Download the latest version for your operating system (Windows, macOS, or Linux).
      2. Extract the ZIP file: Extract the downloaded ZIP file to a location of your choice (e.g., C:\adb on Windows).
    C:\adb
    
  2. Add Platform Tools to your System's PATH:

    1. Windows:

      1. Open the "Environment Variables" settings (search for "Environment Variables" in the Start menu).
      2. Click "Edit the system environment variables".
      3. Click "Environment Variables".
      4. In the "System variables" section, find the "Path" variable, select it, and click "Edit".
      5. Click "New" and add the path to the platform-tools directory (e.g., C:\adb).
    2. macOS/Linux:

      1. Open your terminal.

      2. Add the path to the platform-tools directory to your shell's configuration file (e.g., ~/.bashrc, ~/.zshrc).

        For example: export PATH=$PATH:/path/to/platform-tools.

        export PATH=$PATH:/usr/local/bin/adb
        echo $PATH | tr ":" "\n"
        

        In my case, it’ll be something like this:

        Export PATH (first command) and check that PATH has been added (second command)

      3. Restart your terminal or source the configuration file (e.g., source ~/.bashrc).

        From now on, we will work only in the command line. In my case, it will be the terminal.


  3. Verify ADB Installation:

    1. Open a command line interface (CLI):

      1. Using the Windows Search Bar (Windows OS):
        • Click the Start button or the magnifying glass icon in the taskbar.
        • Type "cmd" (without quotes) in the search bar.
        • Click on the "Command Prompt" result.
        • To run as administrator, right-click on "Command Prompt" in the search results and select "Run as administrator".
      2. Using Spotlight Search (macOS):
        • Click the magnifying glass icon in the menu bar (or press Cmd+Space).
        • Type "Terminal" and double-click it to open.
    2. Type adb and press Enter.

      adb
      
    3. If adb is installed correctly, you should see the ADB help message.

      Help has a lot of lines (I show a couple of them)


  4. Enable USB Debugging on your Android Device:

    1. Go to "Settings" on your Android device.
    2. Scroll down and select "About Phone".
    3. Find "Build Number" and tap it 7 or more times to unlock Developer Options.
    4. Go back to the main "Settings" page, and now you'll see "Developer Options".
    5. Select "Developer Options".
    6. Scroll down to "USB Debugging" and toggle it on.

Fra nu af vil vi kun arbejde i kommandolinjen. i mit tilfælde vil det være terminalen.

Indstilling af din forbindelse

Det næste skridt vil være at forbinde din mobile enhed til din pc. Dette er et relativt simpelt trin, der består af to dele:


  • Trådforbindelse;
  • Trådløs forbindelse.

Tilslutning til tråd:

Du skal tilslutte din mobile enhed til din pc ved hjælp af kablet (USB A/USB C eller USB A/micro USB osv.).


Derefter åbner du terminalen og skriver følgende kommando:

adb devices

You see my device, which is connected by wire to my personal computer. In your case, this "RF8T60M9SBF" number will be a completely different number.


For nu er vi klar til at aktivere TCP/IP-tilstand med følgende kommando:

adb tcpip 5555


Hvis vi allerede er i terminalen, så kan vi tjekke IP-adressen på den mobile enhed i vores Wi-Fi-netværk uden at kigge på den mobile enhed.

adb -d shell "ip route | awk '/wlan0/ {print \$9}'"

My IP address is 10.0.0.108. In your case it will be another one.

Trådløs forbindelse:

Nu hvor du har din enheds IP-adresse, er det tid til at forbinde trådløst. Der er ikke længere brug for en trådløs forbindelse. Når du har kørt adb tcpip 5555, kan du sikkert afbryde USB-kabel.


Vær sikker på, at både din smartphone og din computer er på samme Wi-Fi-netværk.

adb connect <DEVICE_IP>:5555


For eksempel, hvis din enheds IP er 10.0.0.108, vil du indtaste:

adb connect 10.0.0.108:5555


Hvis alt går godt, vil du se en besked som:

Here we are.

Lad os tale om problemet igen

Lad os tage et skridt tilbage og huske, hvad vi løser. Dit barn falder fredeligt i søvn og ser en stille video - måske en sengetidshistorie eller nogle afslappende lyde. Men to timer senere? YouTube's auto-play kicker ind, en høj ad blarer, eller nogle høj energi tegneserie soundtrack vækker dem. De er groggy. Du er groggy. Alle starter deres dag allerede drænet. Hvad vi havde brug for var en tavs vagter - noget usynligt og pålideligt. Et system, der forsigtigt ville sænke lydstyrken i baggrunden uden at stoppe afspilning, uden at blinke irriterende pop-ups, og uden at vække brugeren. Det er præcis, hvad dette script gør.

Arkitektur ved et kig

Her er et hurtigt diagram, der viser, hvordan alt forbinder:


Din computer (der kører Python-skriptet) opretter forbindelse til Android-enheden via ADB via Wi-Fi, overvåger mængden regelmæssigt og reducerer den, hvis det er nødvendigt.

Din computer (der kører Python-skriptet) opretter forbindelse til Android-enheden via ADB via Wi-Fi, overvåger lydstyrken regelmæssigt og reducerer den, hvis det er nødvendigt.

This minimalistic setup allows for seamless automation:Python Script runs on your laptop or mini PC.


Skriptet der gør magien

Kernen i løsningen er et Python-script, der kommunikerer med din Android-enhed via ADB over Wi-Fi.


Hvis lydstyrken er over 5 (Android bruger typisk en 15-punkts skala), sænker scriptet forsigtigt den – et skridt ad gangen, med korte pauser.


Den bedste del? Det respekterer manuelle ændringer. Hvis nogen selv sænker lydstyrken, bemærker manuskriptet og forstyrrer ikke. Det er stille. Det er tilpasningsdygtigt. Det er usynligt - ligesom en god sengetid assistent skal være.

The Script’s Evolution: Fra lille hack til pålideligt værktøj

Da jeg først skrev dette manuskript, var det næppe et par linjer lang.


Det så sådan ud:

import subprocess
import time
import re

def get_stream_volume():
    cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    match = re.search(r'streamVolume:(\d+)', result.stdout)
    return int(match.group(1)) if match else None

def set_volume(level):
    cmd = f"adb shell cmd media_session volume --stream 3 --set {level}"
    subprocess.run(cmd, shell=True)
    print(f"Volume set to {level}")

def monitor_volume():
    while True:
        volume = get_stream_volume()
        if volume is None:
            print("Failed to get volume level. Retrying...")
            time.sleep(5)
            continue

        print(f"Current volume: {volume}")
        
        if volume == 15:
            for vol in range(14, 4, -1):
                set_volume(vol)
                time.sleep(30)
        
        while get_stream_volume() == 5:
            print("Volume is at 5, monitoring every 60 seconds...")
            time.sleep(60)

if __name__ == "__main__":
    monitor_volume()
os.system("adb shell dumpsys audio | grep -i 'streamVolume'")


Men snart gik virkeligheden i gang.Hvad sker der, hvis enheden afbryder forbindelsen midt om natten?Hvad sker der, hvis ADB kaster en timeout?Hvad sker der, hvis telefonen ikke er parret?Hvad sker der, hvis manuskriptet styrter, mens alle sover?


Så udviklede manuskriptet sig.

  • Nogle gange var enheden ikke tilsluttet. Så jeg tilføjede adb connect ip:port.
  • Nogle gange ADB kollapsede midt om natten. Jeg tilføjede undtagelse håndtering og retries.
  • Logging? Ja, tilføjede det også.
  • File logging og konsol logging? Selvfølgelig.
  • Volumen ændrer sig midt i søvnen? Nu sporer scriptet det også - og kun griber ind, når det er nødvendigt.
  • Frekvensovervågning? Forskellige intervaller for høje vs


    Hvad begyndte som et par linjer af script blev til en lille vagthund, der babysitter din telefon - så du behøver ikke.

    import subprocess
    import time
    import re
    import logging
    from datetime import datetime
    
    logging.basicConfig(
        filename='volume_control.log',
        level=logging.INFO,
        format='[%(asctime)s] %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    ADB_DEVICE = "10.0.0.108:5555"
    
    def log(message):
        timestamp = get_timestamp()
        print(f'[{timestamp}] {message}')
        logging.info(message)
    
    def get_timestamp():
        return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
    def connect_adb():
        subprocess.run(f"adb connect {ADB_DEVICE}", shell=True)
        log(f"Reconnected to ADB at {ADB_DEVICE}")
    
    def get_stream_volume():
        cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'"
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
        match = re.search(r'streamVolume:(\d+)', result.stdout)
        return int(match.group(1)) if match else None
    
    def safe_get_stream_volume(retries=3, delay=5):
        for attempt in range(retries):
            volume = get_stream_volume()
            if volume is not None:
                return volume
            log(f"Attempt {attempt + 1}: Failed to get volume. Retrying after reconnect...")
            connect_adb()
            time.sleep(delay)
        log("All attempts failed. Giving up temporarily.")
        return None
    
    def set_volume(level):
        cmd = f"adb shell cmd media_session volume --stream 3 --set {level}"
        subprocess.run(cmd, shell=True)
        log(f"Volume set to {level}, waiting 30 seconds...")
    
    def monitor_volume():
        while True:
            volume = safe_get_stream_volume()
            if volume is None:
                log("Initial volume read failed. Retrying in 30 seconds...")
                time.sleep(30)
                continue
    
            log(f"Current volume: {volume}")
    
            while volume > 5:
                set_volume(volume - 1)
                time.sleep(30)
                volume = safe_get_stream_volume()
                if volume is None:
                    log("Failed to read volume during decreasing.")
                    break 
    
            while True:
                volume = safe_get_stream_volume()
                if volume is None:
                    log("Failed to read volume during monitoring.")
                    time.sleep(30)
                    break
                if volume > 5:
                    log(f"Volume increased to {volume}, restarting decreasing")
                    break
                log(f"Volume is at {volume}, monitoring every 60 seconds...")
                time.sleep(60)
    
    if __name__ == "__main__":
        try:
            monitor_volume()
        except KeyboardInterrupt:
            log("Script stopped by user (Ctrl+C)")
        except Exception as e:
            log(f"Unexpected error: {e}")
        finally:
            log("Script exited.")
    


    Men sørg for at ændre denne linje ADB_DEVICE = "10.0.0.108:5555" i scriptet med din IP-adresse fra "Setting Up Your Connection".


    Kør skriptet: To nemme muligheder såvel som Cron

    Du har to hovedmåder at køre skriptet på:

    1. Direkt med Python


    Hvis du har Python 3 installeret, kan du bare køre:

    python3 reduce_volume.py
    


    Det vil starte med det samme og gøre sit arbejde stille i baggrunden.

    1. Som en selvstændig udførbar


    Vil du dele den med nogen, der ikke har Python installeret?


    Du kan konvertere scriptet til en selvstændig .app til macOS eller .exe til Windows ved hjælp af PyInstaller:

    pyinstaller --onefile reduce_volume.py
    

    Dette vil skabe en bærbar app, der kan lanceres med et dobbeltklik - ingen Python kræves.


    1. Selv planlægge det med en cron job eller opgaveplanlægger, hvis du er fancy.

    One More Thing: Fjern ADB Begrænsninger

    Det er vigtigt at bemærke, at ADB over Wi-Fi kan være skrøbeligt.


    Din fjernforbindelse vil bryde, hvis:

    • Telefonen genstarter.
    • Wi-Fi-netværket ændrer sig.
    • Developer Mode eller USB Debugging bliver deaktiveret.
    • Enheden går for længe uden ADB-aktivitet (nogle systemer kicker automatisk inaktive forbindelser).
    • Og mange andre ...


    Så hvis scriptet holder op med at fungere, skal du blot gentage trinene fra "Setting Up Your Connection":

    1. Connect the mobile device with a wire to your personal computer.

    2. Run the command adb tcpip 5555

      adb tcpip 5555
      
    3. And run adb connect <DEVICE_IP>:5555

    adb connect 10.0.0.108:5555
    

    og du vil være tilbage i erhvervslivet.

    De sidste tanker

    Denne hack handler ikke om at stille dit barns sjov. Det handler om at beskytte deres søvn - og dit sind - fra uventede teknologiske overraskelser.


    Dette kan være et lille script, men for min familie og mig var det livsforandrende. Ikke mere 2 AM YouTube vågne op. Ikke mere kranke morgener. Bare fredelige nætter og en subtil smule forældreautomation.


    • Er det lidt af en hack? Sikker.
    • Fungerer det pålideligt? Absolut.
    • Er det lovligt? Teknisk set ja, men det opererer i en grå zone (ADB-adgang og automatiseret kontrol understøttes ikke officielt af Google for slutbrugere).
    • Men du ved hvad? Så længe det hjælper en træt forælder (eller endda dig selv) sove bedre - det er det værd.
    • Det er subtle.
    • Det er usynligt.
    • Og det virker.


    Lad mig vide, om du vil have kildekoden, en one-click opsætning eller en forbedret version.


    Og hej - sove godt. du har fortjent det.

    P.S. Denne løsning kan forbedres og udvides - for eksempel oprette en tidsplan, tilpasse sig forskellige profiler, spore enhedsaktivitet osv. Men selv i sin grundlæggende form løser den allerede hovedproblemet: det hjælper dig med at falde i søvn - og sove fredeligt.

    P.S. Denne løsning kan forbedres og udvides - for eksempel oprette en tidsplan, tilpasse sig forskellige profiler, spore enhedsaktivitet osv. Men selv i sin grundlæggende form løser den allerede hovedproblemet: det hjælper dig med at falde i søvn - og sove fredeligt.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks