603 קריאות
603 קריאות

זה לא חוקי אנדרואיד האק יעשה אותך הורה טוב יותר

על ידי Sergei Shaikin14m2025/04/16
Read on Terminal Reader

יותר מדי זמן; לקרוא

פרדוקס השינה הדיגיטלית הוא בעיה שאף אחד לא מדבר עליה.מיליוני אנשים נרדמים עכשיו לווידאו של YouTube, פודקאסטים או אפליקציות סטרימינג.
featured image - זה לא חוקי אנדרואיד האק יעשה אותך הורה טוב יותר
Sergei Shaikin HackerNoon profile picture

לא לשבור את החוק, להיות נחמד לילדים שלך, ואל תשכח שאתה אחראי על מה שאתה עושה עם המכשירים שלך.

לא לשבור את החוק, להיות נחמד לילדים שלך, ואל תשכח שאתה אחראי על מה שאתה עושה עם המכשירים שלך.

הבעיה שאף אחד לא מדבר עליה

פרדוקס השינה הדיגיטלית בעידן שבו המסכים שולטים על שגרת השינה, מיליוני אנשים נרדמים כעת מול קטעי וידאו, פודקאסטים או אפליקציות סטרימינג.


עם זאת, להרגל זה יש עלות מוסתרת: חשיפה בלתי נשלטת לקול, במיוחד עבור ילדים.כהורים ומפתחים, התמודדתי עם בעיה זו בידיים ראשונות - שיחות YouTube מאוחרות של הילד שלי הובילו לשינה חסרת מנוחה ועצבנות בבוקר.


אפליקציות בחינם בחנות Google Play, כגון:מגבלות נפח,בקרת נפחייתכן שאפליקציות מסחריות היו טובות יותר, אבל לא בדקתי את זה כי הם עולה כסף, לעתים קרובות קצת.

The Hack (לא חוקי לחלוטין...ish)

יצרתי סקריפט שמתחבר למכשיר אנדרואיד שלך באופן אלחוטי ושומרת מבט על נפחו.אם הוא הופך לקול רם מדי – הוא מוריד אותו בעדינות.אין וידאו עוצר, אין צלצול מסך, אין אינטראקציה משתמש.


כן, מבחינה טכנית, הוא משתמש ב- ADB (אנדרואיד Debug Bridge) מעל Wi-Fi, שהוא כלי מפתחים ולא מיועד להורים לפני השינה.

Setting Up Your Development Environment

הגדרת סביבת פיתוח וחיבור היא קריטית לפני צלילה לתוך הקוד.זה יבטיח שיש לך את כל הכלים והספריות הדרושים, להקל על תהליך הפיתוח.


אני משתמש ב- macOS, כך שכל הדוגמאות בסיפור יהיו עם מערכת זו, אבל שימוש ב- Windows לא הופך את התהליך הרבה יותר קשה בהשוואה ל- macOS.ההבדל היחיד הוא כי במערכת ההפעלה MacOS, Python כבר מותקן, וב- Windows, תצטרך להתקין את Python בעצמך מכאן:תגית: windows python

הנה הפרדה מפורטת יותר:

  1. הורד ומחלץ כלי פלטפורמה: עבור אל אתר האינטרנט הרשמי של Android Developers: Navigate to Android SDK Platform-Tools. Download the SDK Platform Tools: Download the latest version for your operating system (Windows, macOS, or Linux). Extract the ZIP file: Extract the downloaded ZIP file to a location of your choice (e.g., C:\adb on Windows).
  2. הוסף כלי פלטפורמה למסלול המערכת שלך: Windows: פתח את הגדרות "משתנים סביבתיים" (חיפוש עבור "משתנים סביבתיים" בתפריט התחל). לחץ על "הערוך משתנים סביבתיים". לחץ על "משתנים סביבתיים". בסעיף "משתנים סביבתיים", מצא את "מסלול" המשתנה, בחר אותו, ולחץ על "הערוך". לחץ על "חדש" והוסיף את המסלול למדריך כלים פלטפורמה (למשל, C:\adb). macOS/Linux: פתח את המושב. הוסף את המסלול למדריך כלים פלטפורמה לקובץ ההגדרה של הצלחת שלך (למשל, ~/.bashrc, ~/.zshrc). לדוגמה:
  3. בדוק את ההתקנה של ADB: פתח את ממשק שורת הפקודה (CLI): באמצעות Windows Search Bar (Windows OS): לחץ על הכפתור התחל או על סמל הזכוכית הגדילה בשורת המשימות. הקלד "cmd" (ללא ציטוטים) בשורת החיפוש. לחץ על התוצאה של "Command Prompt". כדי להפעיל כמנהל, לחץ על "Command Prompt" בתוצאות החיפוש ובחר "Run as administrator". באמצעות Spotlight Search (macOS): לחץ על סמל הזכוכית הגדילה בשורת התפריט (או לחץ על Cmd+Space). הקלד "Terminal" ולחץ פעמיים על זה כדי לפתוח. הקלד adb ולחץ Enter. adb אם adb מותקן כראוי, עליך לראות את הודעת העזרה
  4. הפעל USB Debugging במכשיר האנדרואיד שלך: עבור אל "הגדרות" במכשיר האנדרואיד שלך. לחצו למטה ובחרו "על הטלפון". מצא את "בנה מספר" ולחץ על זה 7 פעמים או יותר כדי לפתוח אפשרויות מפתחים. לחזור לדף "הגדרות" הראשי, ועכשיו תראו "אפשרויות מפתחים". בחר "אפשרויות מפתחים".

מעתה ואילך, אנחנו עובדים רק בשורת הפקודה.במקרה שלי, זה יהיה הטרמינל.

ליצור את החיבור שלך

הצעד הבא יהיה לחבר את המכשיר הנייד שלך למחשב שלך.זה צעד פשוט יחסית המורכב משני חלקים:


  • חיבור חשמלי;
  • חיבור אלחוטי

חיבור Wire:

אתה צריך לחבר את המכשיר הנייד שלך למחשב באמצעות הכבל (USB A / USB C או USB A / micro USB, וכו ').


לאחר מכן, פתחו את הטרמינל והזינו את הפקודה הבאה:

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.


בינתיים, אנחנו מוכנים להפעיל את מצב TCP/IP עם הפקודה הבאה:

adb tcpip 5555


אם אנחנו כבר בטרמינל, אז אנחנו יכולים לבדוק את כתובת ה- IP של המכשיר הנייד ברשת ה- Wi-Fi שלנו מבלי להסתכל על המכשיר הנייד.

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.

חיבור אלחוטי:

עכשיו שיש לך את כתובת ה-IP של המכשיר שלך, הגיע הזמן להתחבר באופן אלחוטי.לא צריך עוד חיבור אלחוטי.adb tcpip 5555, אתה יכול לפתוח בבטחה את כבל USB.שאר הקסם יקרה דרך Wi-Fi.


ודא כי הטלפון החכם והמחשב שלך נמצאים באותו רשת Wi-Fi ולאחר מכן, בטרמינל שלך, הקלד את הפקודה הבאה:

adb connect <DEVICE_IP>:5555


לדוגמה, אם IP המכשיר שלך הוא10.0.0.108אתה צריך להיכנס:

adb connect 10.0.0.108:5555


אם הכל הולך כמו שצריך, תראו הודעה כמו:

Here we are.

בואו נדבר שוב על הבעיה

בואו נעשה צעד אחורה ונזכור את מה שאנחנו פותרים. הילד שלך נרדם בשקט לצפייה בסרטון שקט - אולי סיפור שינה או כמה צלילים מרגיעים. אבל שעתיים מאוחר יותר? המשחק האוטומטי של YouTube נכנס, בלייזר פרסומת חזק, או כמה רצועת קול קומיקס אנרגיה גבוהה מתעוררת אותם. הם גוגגיים. אתה גוגגי. כולם מתחילים את היום שלהם כבר מיובש. מה שהיינו צריכים היה שומר שקט - משהו בלתי נראה ואמין. מערכת שתוריד בעדינות את נפח הרקע מבלי להפסיק את ההפקה, מבלי להדליק פופ-אפ, מבלי להתעורר את המשתמש.

ארכיטקטורה במבט

הנה תרשים מהיר שמראה איך הכל מחובר:


המחשב שלך (מפעיל את התסריט Python) מתחבר למכשיר Android באמצעות ADB דרך Wi-Fi, מפקח על הקול מעת לעת ומפחית אותו במידת הצורך.

המחשב שלך (מפעיל את התסריט Python) מתחבר למכשיר Android באמצעות ADB דרך Wi-Fi, מפקח על הקול מעת לעת ומפחית אותו במידת הצורך.

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


התסריט שעושה את הקסם

ליבה של הפתרון הוא סקריפט Python שמתקשר עם המכשיר Android שלך באמצעות ADB דרך Wi-Fi.


כל 30 שניות, הוא בודק את נפח זרימת המוסיקה הנוכחית.אם נפח הוא מעל 5 (אנדרואיד בדרך כלל משתמש בסולם של 15 נקודות), התסריט מוריד אותו בעדינות - צעד אחד בכל פעם, עם הפסקות קצרות.


החלק הטוב ביותר? הוא מכבד שינויים ידניים. אם מישהו מפחית את הקול עצמו, התסריט מזהה ולא מפריע. הוא שקט. הוא מתאים. הוא בלתי נראה - בדיוק כמו עוזר שינה טוב צריך להיות.

התפתחות התסריט: מ-Tiny Hack ל-Reliable Tool

כשהתחלתי לכתוב את התסריט, זה היה בקושי כמה שורות ארוכות.


זה נראה משהו כזה:

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


מה קורה אם המכשיר מתנתק באמצע הלילה? מה אם ADB זורק זמן? מה אם הטלפון אינו מצויד? מה אם התסריט מתרסק בזמן שכולם ישנים?


אבל התסריט התפתח.

  • לפעמים, המכשיר לא היה מחובר, אז הוספתי adb connect ip:port.
  • לפעמים ADB התרסק באמצע הלילה.הוספתי טיפול יוצא מן הכלל וחידושים.
  • תגית: כן, גם את זה הוסיפו
  • רישום קבצים ורישום קונסול?
  • כעת, התסריט עוקב אחר זה גם כן - ומתערב רק כאשר יש צורך.
  • תדירות מעקב: טווחים שונים עבור רמות נפח גבוהות לעומת רמות נפח נמוכות.
  • ובכן, הפסקת מנעול מעולה Ctrl + C.


מה שהתחיל בכמה שורות של תסריט הפך לחתול קטן שומר על הטלפון שלך - אז אתה לא צריך.

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


היום, התסריט הוא ברמה הייצור — וקורס פתוח. אבל ודא לשנות את השורה ADB_DEVICE = "10.0.0.108:5555" בתסריט עם כתובת ה- IP שלך מ"להגדיר את הקשר שלך"

הפעלת התסריט: שתי אפשרויות קלות כמו Cron

יש לך שתי דרכים עיקריות להפעיל את התסריט:

  1. ישירות עם Python


אם יש לך Python 3 מותקן, אתה יכול פשוט להפעיל:

python3 reduce_volume.py


הוא יתחיל מיד ויעשה את עבודתו בשקט ברקע.

  1. כאמצעי יישום עצמאי


רוצים לשתף אותו עם מישהו שאין לו Python מותקן?


אתה יכול להמיר את התסריט לתוך standalone.appעבור macOS או.exeעבור Windows, השתמשפינגווין• :

pyinstaller --onefile reduce_volume.py

זה יצר אפליקציה ניידת שיכולה להתחיל בלחיצה כפולה - אין צורך ב- Python.


  1. אפילו לתכנן את זה עם עבודה cron או לוח זמנים של משימות אם אתה פנטסי.

דבר נוסף: הגבלות ADB מרחוק

חשוב לציין כי ADB על Wi-Fi יכול להיות חלש.


החיבור הרחוק שלך ייפסק אם:

  • הטלפון מחדש
  • רשת ה-Wi-Fi משתנה
  • מצב developer או USB Debugging מופעל.
  • המכשיר עובד זמן רב מדי ללא פעילות ADB (יש מערכות שמפעילות באופן אוטומטי חיבורים לא פעילים).
  • ועוד רבים אחרים...


אז אם התסריט מפסיק לעבוד, פשוט חזור על השלבים מ"להגדיר את הקשר שלך"• :

  1. חיבור המכשיר הנייד באמצעות כבל למחשב האישי שלך.
  2. פקודה adb tcpip 5555 adb tcpip 5555
  3. להורדה של Adb Connect <DEVICE_IP>: 5555
adb connect 10.0.0.108:5555

אתה תחזור לעסקים.

מחשבות סופיות

זה לא על להדחיק את הכיף של הילד שלך.זה על להגן על השינה שלהם - ואת החוכמה שלך - מפתיעות טכנולוגיות בלתי צפויות.


זה עשוי להיות תסריט קטן, אבל עבור המשפחה שלי ואני, זה היה שינוי חיים. לא יותר 2 AM התעוררות YouTube. לא יותר בוקר כועס. רק לילות שלווים קצת אוטומציה עדין של ההורים.


  • האם זה קצת hacking?
  • האם זה עובד בצורה אמינה?
  • מבחינה טכנית כן, אבל הוא פועל באזור אפור (גישה ADB ושליטה אוטומטית אינם נתמכים רשמית על ידי Google למשתמשים סופיים).
  • כל עוד זה עוזר להורים עייפים (או אפילו לעצמם) לישון טוב יותר - זה שווה את זה.
  • זה מתוחכם
  • זה בלתי נראה.
  • וזה עובד


תן לי לדעת אם אתה רוצה את קוד המקור, התקנה בלחיצה אחת, או גרסה משופרת.


שינה טובה, אתה מרוויח את זה

P.S. פתרון זה ניתן לשפר ולהרחיב - למשל, להגדיר לוח זמנים, להתאים פרופילים שונים, לעקוב אחר פעילות המכשיר, וכו 'אבל גם בצורתו הבסיסית, זה כבר פותר את הבעיה העיקרית: זה עוזר לך להירדם - וללכת לישון בשלום.

P.S. פתרון זה ניתן לשפר ולהרחיב - למשל, להגדיר לוח זמנים, להתאים פרופילים שונים, לעקוב אחר פעילות המכשיר, וכו 'אבל גם בצורתו הבסיסית, זה כבר פותר את הבעיה העיקרית: זה עוזר לך להירדם - וללכת לישון בשלום.


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks