from kivy.app import App
from kivy.core.window import Window
from kivy.uix.button import Button
try:
from android import log
except ImportError:
def log(tag, msg): print(f"[{tag}] {msg}") # fallback for desktop
#
KEYCODE_MAP = {
19: 'up', # KEYCODE_DPAD_UP
20: 'down', # KEYCODE_DPAD_DOWN
21: 'left', # KEYCODE_DPAD_LEFT
22: 'right', # KEYCODE_DPAD_RIGHT
23: 'select', # KEYCODE_DPAD_CENTER
273: 'up',
274: 'down',
275: 'right',
276: 'left',
13: 'select',
96: 'select',
97: 'back',
99: 'select',
100: 'menu',
109: 'back',
110: 'back',
108: 'select',
106: 'right',
105: 'left',
66: 'select',
160: 'select',
4: 'back',
82: 'menu',
111: 'escape',
7: 'select',
8: 'select',
9: 'select',
10: 'select',
11: 'select',
12: 'select',
13: 'select',
14: 'select',
15: 'select',
16: 'select',
85: 'pause',
126: 'play',
127: 'pause',
86: 'stop',
87: 'next',
88: 'prev',
165: 'info',
}
class TVKeyHandler:
def __init__(self, app):
self.app = app # Pass in SportsApp instance
def handle_key(self, keycode):
action = KEYCODE_MAP.get(keycode)
log("remote-event", f"KEY RECEIVED: {keycode} → {action}")
focused = self.get_focused()
if not focused:
log("remote-event", "
try:
screen = self.app.root.get_screen('MainScreen')
screen.ids.today_button.focus = True
log("remote-event", "
return True
except Exception as e:
log("remote-event", f"
return False
if not action:
log("remote-event", f"Unhandled keycode: {keycode}")
return False
if action == 'up':
focused.focus_previous('up')
elif action == 'down':
focused.focus_next('down')
elif action == 'right':
focused.focus_next('right')
elif action == 'left':
focused.focus_previous('left')
elif action == 'select':
if isinstance(focused, Button):
focused.trigger_action(duration=0.1)
elif action == 'back' or action == 'escape':
App.get_running_app().stop()
elif action == 'menu':
log("remote-event", "Menu button pressed — implement overlay or settings")
else:
log("remote-event", f"Unhandled mapped action: {action}")
return False
return True
def get_focused(self):
from kivy.core.window import Window
return Window.focused_widget or None
< /code>
Ich habe versucht, einen benutzerdefinierten Android -Key -Listeaner einzurichten. Wenn ich über ADB Befehle sende, funktioniert die Menüs, aber die Verwendung der Fernbedienung hat einfach nichts. Gibt es eine Lösung? Ich habe Google ausprobiert und ich kann einfach nicht viel dokumentiert finden, um DPAD- oder Fernbedienungen zu verwenden. Ist es also überhaupt möglich? Vermisse ich etwas sehr Einfaches?