Video- und Audiowiedergabe aufnehmen

Eine App kann das Video oder Audio aufzeichnen, das von einer anderen App wiedergegeben wird. Solche Apps müssen das MediaProjection-Token korrekt verarbeiten. Auf dieser Seite wird erläutert, wie das geht. Außerdem wird gezeigt, wie ein Geräteadministrator die Möglichkeit zum Aufzeichnen von Bildschirm-Snapshots deaktivieren kann und wie eine Audio-App verhindern kann, dass andere Apps die von ihr wiedergegebenen Inhalte aufzeichnen.

Umgang mit einem MediaProjection-Token

Mit der MediaProjection API können Apps ein MediaProjection-Token abrufen, mit dem sie einmalig auf die Aufnahme von Bildschirminhalten oder Audio zugreifen können. Das Android-Betriebssystem bittet den Nutzer um Erlaubnis, bevor es das Token an Ihre App weitergibt.

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 empfangen die mit der Sitzung verknüpften virtuellen Displays oder Audiostreams keine Mediastreams mehr. Ihre App muss entsprechend reagieren, da sonst weiterhin Audio-Stille oder ein schwarzer Videostream aufgezeichnet wird.

Wenn Sie den Verlust eines Tokens verarbeiten möchten, registrieren Sie einen Callback für die MediaProjection-Instanz mit der Methode registerCallback und beenden Sie die Aufzeichnung, wenn die Methode onStop aufgerufen wird.

Weitere Informationen findest du unter Medienprojektion.

Video aufnehmen

Mit DevicePolicyManager können Sie die Bildschirmaufzeichnung verhindern. Bei Arbeitskonten (Android for Work) kann der Administrator die Erfassung von Assistant-Daten für das Arbeitsprofil mit der Methode setScreenCaptureDisabled deaktivieren.

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

Audiowiedergabe aufnehmen

Die AudioPlaybackCapture API wurde in Android 10 eingeführt. Mit dieser API können Apps die von anderen Apps wiedergegebenen Audioinhalte kopieren. Diese Funktion ist das Äquivalent zur Bildschirmaufnahme, aber für Audio. Der primäre Anwendungsfall sind Streaming-Apps, die den von Spielen wiedergegebenen Ton aufnehmen möchten.

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

Erfassungs-App erstellen

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

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

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

Audioaufnahme steuern

In deiner App kannst du festlegen, welche Arten von Inhalten aufgezeichnet werden können und welche anderen Arten von Apps die Wiedergabe aufzeichnen können.

Aufnahme nach Audioinhalt einschränken

Eine App kann mit den folgenden Methoden einschränken, welche Audioinhalte sie aufnehmen kann:

Beachten Sie, dass Sie die Methoden addMatchingUsage() und excludeUsage() nicht zusammen verwenden können. Sie müssen sich für eine der beiden Optionen entscheiden. Ebenso können Sie addMatchingUid() und excludeUid() nicht gleichzeitig verwenden.

Einschränkung der Aufnahme durch andere Apps

Sie können eine App so konfigurieren, dass andere Apps ihre Audioinhalte nicht aufnehmen können. Die Audioausgabe einer App kann nur aufgenommen werden, wenn die App die folgenden Anforderungen erfüllt:

Nutzung

Der Player, der die Audioinhalte wiedergibt, muss seine Nutzung auf USAGE_MEDIA, USAGE_GAME oder USAGE_UNKNOWN festlegen.

Richtlinie erfassen

Die Aufnahmerichtlinie des Players muss AudioAttributes.ALLOW_CAPTURE_BY_ALL sein, damit andere Apps die Wiedergabe aufnehmen können. Es gibt verschiedene Möglichkeiten, dies zu tun:

Wenn diese Voraussetzungen erfüllt sind, können alle vom Player erzeugten Audioinhalte aufgenommen werden.

Systemaufnahme wird deaktiviert

Die oben beschriebenen Schutzmaßnahmen, die die Erfassung erlauben, gelten nur für Apps. Android-Systemkomponenten können die Wiedergabe standardmäßig aufzeichnen. Viele dieser Komponenten werden von Android-Anbietern angepasst und unterstützen Funktionen wie Bedienungshilfen und Untertitel. Aus diesem Grund wird empfohlen, dass Apps dem System erlauben, ihre Wiedergabe aufzunehmen. In seltenen Fällen, in denen die Wiedergabe Ihrer App nicht vom System aufgezeichnet werden soll, legen Sie die Aufzeichnungsrichtlinie 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 wiedergegeben wird, während Sie die Methode aufrufen, ist das Audio nicht betroffen. Sie müssen den Player oder Track 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 verstehen, wie die effektive Richtlinie bestimmt wird. Es wird immer die restriktivste Erfassungsrichtlinie angewendet. Beispielsweise wird bei einer App, deren Manifest setAllowedCapturePolicy="false" enthält, nie zugelassen, dass Nicht-System-Apps ihre Audioinhalte aufnehmen, auch wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL gesetzt ist. Wenn die AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL festgelegt ist und im Manifest setAllowedCapturePolicy="true" festgelegt ist, die AudioAttributes des Mediaplayers aber mit AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) erstellt wurden, kann dieser Mediaplayer nicht von Nicht-System-Apps aufgezeichnet werden.

In der folgenden Tabelle sind die Auswirkungen des Manifestattributs und der wirksamen Richtlinie zusammengefasst:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
wahr jede App Nur System keine Aufnahme
falsch Nur System Nur System keine Aufnahme