Nueva Historia

Este hack ilegal de Android te hará un mejor padre

por Sergei Shaikin14m2025/04/16
Read on Terminal Reader

Demasiado Largo; Para Leer

El paradojo del sueño digital es un problema sobre el que nadie habla.Millones ahora se duermen a los vídeos de YouTube, podcasts o aplicaciones de streaming.He construido un script que se conecta a su dispositivo Android inalámbricamente y mantiene un ojo en su volumen.
featured image - Este hack ilegal de Android te hará un mejor padre
Sergei Shaikin HackerNoon profile picture

Disclaimer: Este artículo es sólo para fines educativos. no viole la ley, sea amable con sus hijos, y no olvide que usted es responsable de lo que hace con sus propios dispositivos.

Disclaimer: Este artículo es sólo para fines educativos. no viole la ley, sea amable con sus hijos, y no olvide que usted es responsable de lo que hace con sus propios dispositivos.

El problema de que nadie habla

El paradojo del sueño digital En una era en la que las pantallas dominan las rutinas de la hora de acostarse, millones de personas ahora se someten a vídeos de YouTube, podcasts o aplicaciones de streaming.


Sin embargo, este hábito tiene un coste oculto: exposición incontrolada al volumen, especialmente para los niños.Como padre y desarrollador, me he enfrentado a este problema de primera mano: los bingos de YouTube tardías de mi hijo llevaron al sueño inquieto y la irritabilidad matutina.


aplicaciones gratuitas en la Tienda de Google Play, como Volumen Limiter, Volumen Control fueron un fracaso: se estrellaron, no tenían configuraciones, o eran demasiado intrusivos. Tal vez las aplicaciones comerciales serían mejores, pero he probado esto ya que costaron dinero, a menudo bastante.

The Hack (Totalmente ilegal...ish)

He construido un script que se conecta a tu dispositivo Android inalámbricamente y mantiene un ojo en su volumen. Si se hace demasiado fuerte, lo baja suavemente.


Sí, técnicamente, utiliza ADB (Android Debug Bridge) sobre Wi-Fi, que es una herramienta de desarrollador y no está destinado a la paternidad antes de dormir.

Configurando su entorno de desarrollo

La configuración de un entorno de desarrollo y la conectividad es crucial antes de sumergirse en el código. Esto garantizará que tenga todas las herramientas y bibliotecas necesarias, simplificando el proceso de desarrollo.


Yo uso macOS, así que todos los ejemplos en la historia serán con este sistema, pero usando Windows no hace que el proceso sea mucho más difícil en comparación con MacOS.La única diferencia es que en el sistema operativo MacOS, Python ya está instalado, y en Windows, tendrá que instalar Python usted mismo desde aquí: Windows Python

Aquí hay una descomposición más detallada:

  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.

A partir de ahora, sólo trabajaremos en la línea de comandos. En mi caso, será el terminal.

Configurar tu conexión

El siguiente paso será conectar su dispositivo móvil con su PC. Este es un paso relativamente simple que consta de dos partes:


  • Conexión inalámbrica;
  • Conexión inalámbrica.

Conexión de cables:

Debe conectar su dispositivo móvil a su PC utilizando el cable (USB A/USB C o USB A/micro USB, etc.).


Después de eso, abre el terminal y escribe el siguiente comando:

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.


Por ahora, estamos listos para activar el modo TCP/IP con el siguiente comando:

adb tcpip 5555


Si ya estamos en el terminal, entonces podemos verificar la dirección IP del dispositivo móvil en nuestra red Wi-Fi sin mirar al dispositivo móvil.

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.

Conexión inalámbrica:

Ahora que tienes la dirección IP de tu dispositivo, es hora de conectarte inalámbricamente.Ya no hace falta una conexión por cable.Una vez que hayas ejecutado adb tcpip 5555, puedes desconectar de forma segura el cable USB.


Asegúrese de que tanto su teléfono inteligente como su ordenador estén en la misma red Wi-Fi.

adb connect <DEVICE_IP>:5555


Por ejemplo, si el IP de su dispositivo es 10.0.0.108, ingresaría:

adb connect 10.0.0.108:5555


Si todo va bien, verás un mensaje como:

Here we are.

Vamos a hablar del problema de nuevo

Tomemos un paso atrás y recordemos lo que estamos resolviendo. Su hijo se duerme tranquilo viendo un vídeo silencioso - tal vez una historia de la hora de dormir o algunos sonidos relajantes. Pero dos horas más tarde? el auto-play de YouTube empieza, un anuncio fuerte, o alguna banda sonora de dibujos animados de alta energía los despierta. Son groggy. Usted es groggy. Todo el mundo comienza su día ya drenado. Lo que necesitábamos era un guardián silencioso - algo invisible y confiable. Un sistema que bajaría suavemente el volumen en el fondo sin detener la reproducción, sin flashing irritantes pop-ups, y sin despertar al usuario. Eso es exactamente lo que hace este guión.

Arquitectura a la vista

Aquí hay un diagrama rápido que muestra cómo todo se conecta:


Tu ordenador (executando el script Python) se conecta al dispositivo Android a través de ADB a través de Wi-Fi, monitora el volumen periódicamente y lo reduce si es necesario.

Tu ordenador (executando el script Python) se conecta al dispositivo Android a través de ADB a través de Wi-Fi, monitora el volumen periódicamente y lo reduce si es necesario.

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


El guión que hace la magia

El núcleo de la solución es un script Python que comunica con su dispositivo Android a través de ADB a través de Wi-Fi.


Cada 30 segundos, comprueba el volumen de flujo de música actual. Si el volumen está por encima de 5 (Android normalmente utiliza una escala de 15 puntos), el script lo baja suavemente - un paso a la vez, con breves pausas. Si el volumen ya es 5 o inferior, simplemente sigue viendo - esperando silenciosamente en caso de que el volumen se eleve de nuevo.


La mejor parte? Respeta los cambios manuales. Si alguien baja el volumen por sí mismo, el guión se da cuenta y no interfiere. Es silencioso. Es adaptativo. Es invisible - igual que debería ser un buen asistente para dormir.

La evolución del guión: de Tiny Hack a la herramienta fiable

Cuando escribí por primera vez este guión, apenas tenía unas pocas líneas de largo.


Lo que se ve es lo siguiente:

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


¿Qué pasa si el dispositivo se desconecta en medio de la noche? ¿Qué pasa si ADB deja de funcionar? ¿Qué pasa si el teléfono no está emparejado? ¿Qué pasa si el guión se rompe mientras todos duermen?



Así que el guión evolucionó.

  • A veces, el dispositivo no estaba conectado. Así que añadió adb connect ip:port.
  • A veces ADB se estrelló a medianoche. Añadió manejo excepcional y retries.
  • Logging? Sí, añadió eso también.
  • File logging y console logging? Por supuesto.
  • Volumen cambia en medio del sueño? Ahora, el script también sigue eso - y sólo interviene cuando sea necesario.
  • Movimiento de frecuencia? Diferentes intervalos para altos y bajos niveles de volumen


    Lo que comenzó como unas pocas líneas de guión se convirtió en un pequeño perro de guardia que cuida de tu teléfono, así que no tienes que hacerlo.

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


    Hoy, el script es de nivel de producción — y código abierto. pero asegúrese de cambiar esta línea ADB_DEVICE = "10.0.0.108:5555" en el script con su dirección IP de "Setting Up Your Connection".

    Ejecutar el guión: dos opciones fáciles, así como Cron

    Tienes dos maneras principales de ejecutar el script:

    1. Directamente con Python


    Si tienes Python 3 instalado, sólo puedes ejecutarlo:

    python3 reduce_volume.py
    


    Se iniciará inmediatamente y hará su trabajo en silencio en el fondo.

    1. Como una ejecutable independiente


    Quieres compartirlo con alguien que no tenga Python instalado?


    Puede convertir el script en un standalone .app para macOS o .exe para Windows, usando PyInstaller:

    pyinstaller --onefile reduce_volume.py
    

    Esto creará una aplicación portátil que puede ser lanzada con un doble clic — no se requiere Python.


    1. Incluso programa con un trabajo cron o un programador de tareas si eres fancy.

    Una cosa más: limitaciones de ADB remotas

    Es importante notar que ADB sobre Wi-Fi puede ser frágil.


    Tu conexión remota se romperá si:

    • El teléfono se reinicia.
    • La red Wi-Fi cambia.
    • Modo de desarrollador o Debugging USB se deshabilita.
    • El dispositivo dura demasiado tiempo sin actividad ADB (algunos sistemas arrancan automáticamente conexiones inactivas).
    • Y muchos otros ...


    Por lo tanto, si el script deja de funcionar, simplemente repita los pasos de "Configurar su conexión":

    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
    

    y estarás de vuelta en el negocio.

    Pensamientos finales

    Este hack no se trata de silenciar la diversión de su hijo.Se trata de proteger su sueño - y su sanidad - de sorpresas tecnológicas inesperadas.


    Este puede ser un pequeño guión, pero para mi familia y para mí, fue un cambio de vida. No más 2 AM despertar en YouTube. No más mañanas cranky. Sólo noches pacíficas y un poco de automatización parental.


    • ¿Es un poco de un hack? Sí.
    • ¿Funciona de forma confiable? Absolutamente.
    • ¿Es legal? Técnicamente sí, pero funciona en una zona gris (el acceso ADB y el control automatizado no son oficialmente respaldados por Google para los usuarios finales).
    • Pero sabes qué? Mientras ayude a un padre cansado (o incluso a ti mismo) a dormir mejor, vale la pena.
    • Es sutil.
    • Es invisible.
    • Y funciona.


    Dime si desea el código fuente, una configuración de un clic o una versión mejorada.


    Y hey — duerme bien. tú lo has ganado.

    P.S. Esta solución se puede mejorar y ampliar - por ejemplo, establecer un horario, adaptarse a diferentes perfiles, rastrear la actividad del dispositivo, etc. Pero incluso en su forma básica, ya resuelve el problema principal: te ayuda a dormir - y dormir tranquilo.Y sí, si tienes una solicitud o idea específica, estaré encantado de ayudarte, y al mismo tiempo, esto será un tema para otro artículo.

    P.S. Esta solución se puede mejorar y ampliar - por ejemplo, establecer un horario, adaptarse a diferentes perfiles, rastrear la actividad del dispositivo, etc. Pero incluso en su forma básica, ya resuelve el problema principal: te ayuda a dormir - y dormir pacíficamente.Y sí, si tienes una solicitud o idea específica, estaré encantado de ayudarte, y al mismo tiempo, esto será un tema para otro artículo.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks