🎮Virtuelle Fernbedienung

Jede Taste einer Fernbedienung ist für Android nur eine Zahl. Der Befehl input keyevent schickt diese Zahl an das System – genau so, als hätte jemand gedrückt. Klick auf die Tasten und sieh, welcher Befehl entsteht.

🕹️Drücken, Befehl sehen, Makro aufzeichnen

Zuletzt gedrückt

Drück eine Taste auf der Fernbedienung – hier erscheint der passende Befehl.

🎬 Makro-Rekorder (0 Schritte)

  1. Noch leer – jede gedrückte Taste wird hier angehängt.
makro.sh – aus der Klickfolge erzeugt
#!/usr/bin/env bash
# Mein Makro – aufgezeichnet mit VisualAndroidTV (0 Schritte)
# Aufruf: ./makro.sh            oder mit anderem Ziel: TV_HOST=tv.example.org:5555 ./makro.sh
set -euo pipefail

TV_HOST="${TV_HOST:-192.0.2.50:5555}"
PAUSE="${PAUSE:-0.4}"   # Wartezeit zwischen zwei Tasten in Sekunden

adb connect "$TV_HOST" >/dev/null
adb -s "$TV_HOST" get-state >/dev/null 2>&1 || { echo "Keine Verbindung zu $TV_HOST" >&2; exit 1; }

# -n: adb liest nicht von der Standardeingabe
tv() { adb -s "$TV_HOST" shell -n "$@"; sleep "$PAUSE"; }

# (noch keine Schritte aufgezeichnet)
📖 Alle 66 Tasten mit Zahlenwert
TV & Eingänge
Medien
Ziffern & Farben
System
Ein/Aus
Lautstärke
Navigation
Text

📎 Quellen: Android Developers – android.view.KeyEvent · AOSP – InputShellCommand (Quelltext von „input“)

💡Gut zu wissen

  • 🔢 Name oder Zahl: input keyevent KEYCODE_HOME und input keyevent 3 bewirken dasselbe. Die Zahlen gehören zur öffentlichen Android-API und bleiben stabil.
  • 🔇 VOLUME_MUTE (164) ≠ MUTE (91): Das erste schaltet den Ton stumm, das zweite das Mikrofon.
  • ⏻ POWER schaltet um, SLEEP und WAKEUP sind eindeutig: In Skripten lieber KEYCODE_SLEEP (223) und KEYCODE_WAKEUP (224) – sie tun nichts, wenn der Zustand schon stimmt.
  • 📺 HDMI-Tasten sind geräteabhängig: KEYCODE_TV_INPUT_HDMI_1 … _4 (243–246) wertet nur ein Fernseher aus, dessen Hersteller sie eingebaut hat. Ein Stick am HDMI-Anschluss kann den Eingang des Fernsehers so nicht umschalten.
  • ⌨️ Text: input text tippt in das gerade fokussierte Feld. Ein Leerzeichen schreibt man als %s.
  • ⏱ Pausen einplanen: Der Fernseher braucht Zeit für Animationen und App-Starts. Ohne sleep laufen Tasten ins Leere.

📎 Quellen: Android Developers – android.view.KeyEvent · AOSP – InputShellCommand (Quelltext von „input“) · AOSP – VolumeCtrl (Quelltext von „media volume“) · Android Developers – TvContract

🔊Mehr als Tasten: Lautstärke und Eingänge direkt

Lautstärke als Zahl statt Tastendrücken
adb shell media volume --stream 3 --get          # Stream 3 = Medien
adb shell media volume --show --stream 3 --set 10
adb shell media volume --stream 3 --adj lower
HDMI-Eingang über das TV-Input-Framework (geräteabhängig)
# 1) Kennungen der Eingänge anzeigen (Ausgabe je Hersteller verschieden)
adb shell dumpsys tv_input | grep -i hdmi
# 2) Eingang über seine Kennung öffnen – <inputId> von oben einsetzen
adb shell am start -a android.intent.action.VIEW \
  -d 'content://android.media.tv/passthrough/<inputId>'
Nicht auf jedem Gerät
Der Höchstwert der Lautstärke, die Kennungen der Eingänge und ob die Fernseh-App den zweiten Befehl annimmt, hängen vom Hersteller ab. Erst von Hand ausprobieren, dann ins Skript schreiben.

📎 Quellen: AOSP – VolumeCtrl (Quelltext von „media volume“) · Android Developers – TvContract · Android Developers – Android Debug Bridge (adb)