From e43b44725bfcae69cd8835e675852a1bb900d636 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Wed, 30 Sep 2026 02:41:46 +0200 Subject: [PATCH] feat(android-agent): Bildschirm-Aufnahme nach Neustart automatisch scharf schalten MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die BERECHTIGUNGEN bleiben dauerhaft (pm grant / appops in appops.xml), die MediaProjection-SITZUNG aber nicht — Android laesst sie nicht speichern. Nach Reboot/App-Neustart war der Agent also verbunden, konnte aber keinen Screenshot machen, bis jemand am Fernseher 'Bildschirm-Zugriff erlauben' drueckt. - CaptureActivity: unsichtbarer Helfer (Theme.Translucent, noHistory, excludeFromRecents), fordert die Projektion an und reicht das Ergebnis an den Dienst. Mit gesetztem AppOp PROJECT_MEDIA laeuft das OHNE Dialog durch. - AgentService startet sie beim Dienststart automatisch nach (2,5s Verzoegerung), aber nur wenn captureEnabled gesetzt ist — wer die Aufnahme nie wollte, bekommt auch keinen Dialog. - AgentConfig.captureEnabled: wird gesetzt, sobald die Aufnahme einmal lief, und kann beim Fern-Einrichten mitgegeben werden (nur wenn der Satellit PROJECT_MEDIA wirklich erteilen konnte). Android-Version 0.0.1.3. Co-Authored-By: Claude Opus 4.8 --- .../android/app/src/main/AndroidManifest.xml | 11 ++++ .../de/hackersoft/ariaagent/AgentConfig.kt | 6 ++ .../de/hackersoft/ariaagent/AgentService.kt | 18 +++++ .../hackersoft/ariaagent/CaptureActivity.kt | 65 +++++++++++++++++++ .../de/hackersoft/ariaagent/MainActivity.kt | 3 + satellite/satellite.py | 5 +- 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 host-agent/android/app/src/main/java/de/hackersoft/ariaagent/CaptureActivity.kt diff --git a/host-agent/android/app/src/main/AndroidManifest.xml b/host-agent/android/app/src/main/AndroidManifest.xml index 16eed78..6165181 100644 --- a/host-agent/android/app/src/main/AndroidManifest.xml +++ b/host-agent/android/app/src/main/AndroidManifest.xml @@ -49,6 +49,17 @@ + + + dict: "-e", "token", q(rvs_token), "--ei", "port", str(int(params.get("rvs_port") or 443)), "--ez", "tls", "true" if _as_bool(params.get("rvs_tls"), True) else "false", - "--ez", "control", "true" if _as_bool(params.get("control"), True) else "false"] + "--ez", "control", "true" if _as_bool(params.get("control"), True) else "false", + # Nur wenn die Bildschirm-Berechtigung wirklich sitzt: dann darf sich + # die Aufnahme nach jedem Neustart selbst scharf schalten (dialogfrei). + "--ez", "capture", "true" if "Bildschirmaufnahme" in perms.get("granted", []) else "false"] if params.get("name"): args += ["-e", "name", q(str(params["name"]))] if params.get("reply_mode"):