603 aflæsninger
603 aflæsninger

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
af

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.

af

Disclaimer: This article is for educational purposes only. Don't break the law, be nice to your kids, and don't forget that you're responsible for what you do with your own devices.

Problemet 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.


Gratis apps i Google Play-butikken, somBegrænset volumen, derKontrol af volumenvar 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 ikke testet dette, da de koster penge, ofte ganske lidt.

The Hack (Totalt ulovligt...ish)

Jeg byggede 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. ingen stop video, ingen skærmblink, ingen brugerinteraktion.


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

Skab dit udviklingsmiljø

Opsætning af et udviklingsmiljø og tilslutning 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 udviklingsprocessen.


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 er Python allerede installeret, og i Windows skal du installere Python selv herfra:Windows med Python

Her er en mere detaljeret opdeling:

    af
  1. Download og udtræk platformværktøjer: Gå til den officielle Android Developers hjemmeside: Navigér til Android SDK Platform-værktøjer. Download SDK Platform Tools: Download den nyeste version til dit operativsystem (Windows, macOS eller Linux). Udtræk ZIP-filen: Udtræk den downloadede ZIP-fil til et sted efter eget valg (f.eks. C:\adb på Windows).
  2. af
  3. 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).

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


  4. af
  5. Kontroller ADB Installation: Åbn en kommandolinje interface (CLI): Brug Windows Search Bar (Windows OS): Klik på Start-knappen eller forstørrelsesglasikonet i opgavelinjen. Skriv "cmd" (uden citater) i søgefeltet. Klik på "Command Prompt" resultat. For at køre som administrator skal du højreklikke på "Command Prompt" i søgeresultaterne og vælge "Kør som administrator". Brug Spotlight Search (macOS): Klik på forstørrelsesglasikonet i menulinjen (eller tryk på Cmd+Space). Skriv "Terminal" og dobbeltklik på det for at åbne det. Typ adb og tryk på Enter. adb Hvis adb er installeret korrekt, skal du se ADB hjælp besked.
  6. af
  7. Aktiver USB Debugging på din Android-enhed: Gå til "Indstillinger" på din Android-enhed. Rul ned og vælg "Om telefonen". Find "Build Number" og tryk på det 7 eller flere gange for at låse Optioner for udviklere. Gå tilbage til den vigtigste "Indstillinger" side, og nu vil du se "Optioner for udviklere". Vælg "Optioner for udviklere". Rul ned til "USB Debugging" og skift det til.
  8. af

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

Opret din forbindelse

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


    af
  • trådbundne forbindelser;
  • af
  • Wireless connection.
  • af

Wire forbindelse:

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.


I øjeblikket 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 kontrollere 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.

Den trådløse forbindelse:

Nu hvor du har din enheds IP-adresse, er det tid til at oprette en trådløs forbindelse. Der er ikke længere brug for en trådløs forbindelse.adb tcpip 5555, du kan sikkert fjerne USB-kabel. resten af magien vil ske over Wi-Fi.


Sørg for, at både din smartphone og din computer er på samme Wi-Fi-netværk.

adb connect <DEVICE_IP>:5555


For eksempel, hvis din enhed IP er10.0.0.108Du vil komme ind:

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 i søvn fredeligt og ser en stille video - måske en sengetidshistorie eller nogle afslappende lyde. Men to timer senere? YouTube's auto-play sparker 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ålidelig. Et system, der forsigtigt ville sænke mængden 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 i et kig

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


af

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.

af

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.

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 det - 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 adaptivt. 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 kun få linjer langt.


Det så lidt 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'")


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 kolliderer, mens alle sover?


Så udviklede manuskriptet sig.

    af
  • Så jeg tilføjede adb connect ip:port.
  • af
  • Nogle gange kollapsede ADB midt om natten. Jeg tilføjede undtagelseshåndtering og retries.
  • Ja, det tilføjede jeg også.
  • af
  • Fil logging og konsol logging? selvfølgelig.
  • af
  • Nu følger manuskriptet også det – og griber kun ind, når det er nødvendigt.
  • af
  • Forskellige intervaller for høje vs. lave volumenniveauer.
  • af
  • Og ja, graceful shutdown Ctrl + C.
  • af


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

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.")


I dag er scriptet i produktionsklasse – og open source. Men sørg for at ændre denne linje ADB_DEVICE = "10.0.0.108:5555" i scriptet med din IP-adresse fra“Sæt din forbindelse op”af .

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

Du har to primære måder at køre manuskriptet på:

  1. Direkte med Python
  2. af


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.

    af
  1. Som en selvstændig udøvende
  2. af


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


Du kan konvertere scriptet til en standalone.apptil macOS eller.exefor Windows, ved hjælp afPyInstaller: af

pyinstaller --onefile reduce_volume.py

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


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

Endnu en ting: Remote ADB Begrænsninger

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


Din fjernforbindelse vil bryde, hvis:

    af
  • Telefonen er reboot.
  • af
  • Wi-Fi netværk ændrer sig.
  • af
  • Udviklertilstand eller USB Debugging bliver deaktiveret.
  • af
  • Enheden kører for længe uden ADB aktivitet (nogle systemer auto-kick inaktive forbindelser).
  • af
  • Og mange andre...
  • af


Så hvis manuskriptet holder op med at fungere, skal du blot gentage trinene fra“Sæt din forbindelse op”: af

    af
  1. Tilslut mobilenheden med en tråd til din personlige computer.
  2. af
  3. Udfør adb tcpip 5555 adb tcpip 5555
  4. af
  5. Og kør adb connect <DEVICE_IP>:5555
  6. af
adb connect 10.0.0.108:5555

Du kommer tilbage i erhvervslivet.

Afsluttende tanker

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. Ikke mere kranke morgener. Bare fredelige nætter og en subtil smule forældreautomatisering.


    af
  • Er det lidt af en hack?
  • af
  • Fungerer det pålideligt? helt sikkert.
  • af
  • Teknisk set ja, men det opererer i en grå zone (ADB-adgang og automatisk styring understøttes ikke officielt af Google for slutbrugere).
  • af
  • Så længe det hjælper en træt forælder (eller endda dig selv) sove bedre - det er det værd.
  • af
  • Det er subtilt.
  • af
  • Det er usynligt.
  • af
  • Og det virker.
  • af


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


Sov godt, du har fortjent det.

af

P.S. Denne løsning kan forbedres og udvides - for eksempel oprette en tidsplan, tilpasse sig forskellige profiler, spore enhedsaktivitet mv. 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.

af

P.S. Denne løsning kan forbedres og udvides - for eksempel oprette en tidsplan, tilpasse sig forskellige profiler, spore enhedsaktivitet mv. 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