Video- und Audiowiedergabe aufnehmen

Eine App kann das Video oder Audio aufnehmen, das von einer anderen App abgespielt wird. Solche Apps müssen das MediaProjection-Token richtig verarbeiten. Auf dieser Seite wird die Vorgehensweise beschrieben. Außerdem wird erläutert, wie ein Geräteadministrator die Möglichkeit zum Erstellen von Bildschirmabbildern deaktivieren kann und wie eine Audio-App verhindern kann, dass andere Apps die wiedergegebenen Inhalte aufzeichnen.

Umgang mit einem MediaProjection-Token

Mit der MediaProjection API können Apps ein MediaProjection-Token abrufen, mit dem sie einmaligen Zugriff auf Bildschirminhalte oder Audio haben. Das Android-Betriebssystem fragt den Nutzer um Erlaubnis, bevor das Token Ihrer App gewährt wird.

Das Betriebssystem zeigt die aktiven MediaProjection-Tokens in der Benutzeroberfläche der Schnelleinstellungen an und ermöglicht es Nutzern, den Zugriff auf ein Token jederzeit zu widerrufen. In diesem Fall werden die mit der Sitzung verknüpften virtuellen Displays oder Audiostreams nicht mehr mit Medienstreams versorgt. Deine App muss entsprechend reagieren. Andernfalls wird die Audiostumme oder ein schwarzer Videostream fortgesetzt.

Um den Verlust eines Tokens zu handhaben, registrieren Sie mit der Methode registerCallback einen Callback auf der Instanz MediaProjection und beenden Sie die Aufzeichnung, wenn die Methode onStop aufgerufen wird.

Weitere Informationen finden Sie unter Medienprojektion.

Video aufnehmen

In der Beispiel-App „ScreenCapture“ erfahren Sie, wie Sie mit der Media Projection API den Bildschirm eines Geräts in Echtzeit erfassen und in einer SurfaceView anzeigen.

Mit DevicePolicyManager können Sie die Bildschirmaufzeichnung verhindern. Bei Enterprise-Konten (Android for Work) kann der Administrator die Erhebung von Assistentendaten für das Arbeitsprofil mithilfe der Methode setScreenCaptureDisabled deaktivieren.

Im Codelab Android-Geräte ohne App verwalten wird gezeigt, wie Sie Screenshots verbieten.

Audiowiedergabe erfassen

Die AudioPlaybackCapture API wurde in Android 10 eingeführt. Mit dieser API können Anwendungen die Audioinhalte kopieren, die von anderen Anwendungen abgespielt werden. Diese Funktion ist das Äquivalent zur Bildschirmaufzeichnung, aber für Audio. Der Hauptanwendungsfall sind Streaming-Apps, die das von Spielen wiedergegebene Audio aufnehmen möchten.

Die AudioPlaybackCapture API hat keine Auswirkungen auf die Latenz der App, deren Audio erfasst wird.

App für die Bild- und Videoaufnahme entwickeln

Aus Sicherheits- und Datenschutzgründen gelten für die Wiedergabeaufzeichnung einige Einschränkungen. Damit eine App Audio aufnehmen kann, muss sie folgende Anforderungen erfüllen:

Wenn Sie Audio von einer anderen App aufnehmen möchten, muss Ihre App ein AudioRecord-Objekt erstellen und ihm ein AudioPlaybackCaptureConfiguration hinzufügen. Gehen Sie dazu so vor:

  1. Rufen Sie AudioPlaybackCaptureConfiguration.Builder.build() auf, um eine AudioPlaybackCaptureConfiguration zu erstellen.
  2. Übergeben Sie die Konfiguration an die AudioRecord, indem Sie setAudioPlaybackCaptureConfig aufrufen.

Audioaufnahme steuern

Ihre App kann festlegen, welche Arten von Inhalten sie aufzeichnen kann und welche anderen Arten von Apps ihre eigene Wiedergabe aufzeichnen können.

Aufnahme durch Audioinhalte einschränken

Mithilfe der folgenden Methoden kann eine App einschränken, welche Audiodaten erfasst werden können:

Die Methoden addMatchingUsage() und excludeUsage() können nicht gleichzeitig verwendet werden. Sie müssen eine der beiden Optionen auswählen. Ebenso können Sie addMatchingUid() und excludeUid() nicht gleichzeitig verwenden.

Aufnahmen durch andere Apps einschränken

Sie können eine App so konfigurieren, dass andere Apps keine Audioinhalte davon aufzeichnen können. Audio von einer App kann nur erfasst werden, wenn die App diese Anforderungen erfüllt:

Nutzung

Der Player, der das Audio erzeugt, muss die Verwendung auf USAGE_MEDIA, USAGE_GAME oder USAGE_UNKNOWN festlegen.

Erfassungsrichtlinie

Die Erfassungsrichtlinie des Players muss AudioAttributes.ALLOW_CAPTURE_BY_ALL lauten, damit andere Apps die Wiedergabe aufzeichnen können. Dazu gibt es mehrere Möglichkeiten:

Wenn diese Voraussetzungen erfüllt sind, kann jede vom Player erzeugte Audioausgabe aufgezeichnet werden.

Systemaufzeichnung deaktivieren

Die oben beschriebenen Schutzmaßnahmen, die die Erfassung zulassen, gelten nur für Apps. Android-Systemkomponenten können die Wiedergabe standardmäßig erfassen. Viele dieser Komponenten werden von Android-Anbietern angepasst und unterstützen Funktionen wie Bedienungshilfen und Untertitel. Aus diesem Grund empfiehlt es sich, dass das System die Wiedergabe in Apps erfassen kann. In seltenen Fällen, in denen Sie nicht möchten, dass die Wiedergabe Ihrer App vom System erfasst wird, legen Sie die Erfassungsrichtlinie auf ALLOW_CAPTURE_BY_NONE fest.

Richtlinie zur Laufzeit festlegen

Sie können AudioManager.setAllowedCapturePolicy() aufrufen, um die Aufnahmerichtlinie zu ändern, während eine App ausgeführt wird. Wenn ein MediaPlayer oder AudioTrack beim Aufrufen der Methode wiedergegeben wird, ist das Audio nicht betroffen. Du musst den Player oder Titel schließen und wieder öffnen, damit die Richtlinienänderung wirksam wird.

Richtlinie = Manifest + AudioManager + AudioAttributes

Da die Erfassungsrichtlinie an mehreren Stellen angegeben werden kann, ist es wichtig zu wissen, wie die wirksame Richtlinie ermittelt wird. Es wird immer die strengste Erfassungsrichtlinie angewendet. Eine App, deren Manifest setAllowedCapturePolicy="false" enthält, erlaubt es beispielsweise niemals Drittanbieter-Apps, Audioinhalte zu erfassen, auch wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL festgelegt ist. Wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL und das Manifest auf setAllowedCapturePolicy="true" festgelegt ist, die AudioAttributes des Mediaplayers aber mit AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) erstellt wurde, kann dieser Mediaplayer nicht von nicht systemeigenen Apps erfasst werden.

In der folgenden Tabelle ist die Wirkung des Manifest-Attributs und der wirksamen Richtlinie zusammengefasst:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
wahr alle Apps Nur System Keine Aufnahme
false Nur System Nur System keine Aufnahme