Video- und Audiowiedergabe aufnehmen

Eine App kann Video- oder Audioinhalte aufzeichnen, die in einer anderen App wiedergegeben werden. 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 Screenshots deaktivieren kann und wie eine Audio-App verhindern kann, dass andere Apps die von ihr wiedergegebenen Inhalte aufzeichnen.

MediaProjection-Token verarbeiten

Mit der MediaProjection API können Apps ein MediaProjection-Token abrufen, das ihnen einmaligen Zugriff auf die Aufnahme von Bildschirminhalten oder Audio gewährt. Das Android-Betriebssystem fragt den Nutzer nach seiner Einwilligung, bevor es das Token an Ihre App weitergibt.

Das Betriebssystem zeigt die aktiven MediaProjection-Tokens in den Schnelleinstellungen an und ermöglicht es Nutzern, den Zugriff auf ein Token jederzeit zu widerrufen. In diesem Fall werden keine Media-Streams mehr an die virtuellen Displays oder Audio-Streams gesendet, die mit der Sitzung verknüpft sind. Ihre App muss angemessen reagieren, da sonst weiterhin Stille oder ein schwarzer Videostream aufgezeichnet wird.

Wenn ein Token verloren geht, 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 finden Sie unter Medienprojektion.

Video aufnehmen

In der ScreenCapture-Beispiel-App erfahren Sie, wie Sie die Media Projection API verwenden, um den Bildschirm eines Geräts in Echtzeit aufzunehmen und in einer SurfaceView anzuzeigen.

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

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

Audiowiedergabe aufzeichnen

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

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

Aufnahme-App entwickeln

Aus Sicherheits- und Datenschutzgründen unterliegt die Aufnahme der Wiedergabe einigen Einschränkungen. Damit eine App Audio aufnehmen kann, muss sie die folgenden Anforderungen erfüllen:

Wenn Ihre App Audio von einer anderen App aufnehmen soll, muss sie ein AudioRecord-Objekt erstellen und ihm ein AudioPlaybackCaptureConfiguration hinzufügen. Gehen Sie dazu 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

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

Aufnahme durch Audioinhalte einschränken

Eine App kann einschränken, welche Audioinhalte sie erfassen darf, indem sie die folgenden Methoden verwendet:

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

Aufnahme durch andere Apps einschränken

Sie können eine App so konfigurieren, dass andere Apps keine Audioinhalte von ihr aufnehmen können. Audioinhalte einer App können nur aufgezeichnet werden, wenn die App die folgenden Anforderungen erfüllt:

Nutzung

Der Player, der die Audioausgabe erzeugt, muss seine Nutzung auf USAGE_MEDIA, USAGE_GAME oder USAGE_UNKNOWN festlegen.

Erfassungsrichtlinie

Die Aufnahmerichtlinie des Spielers muss AudioAttributes.ALLOW_CAPTURE_BY_ALL sein, damit andere Apps die Wiedergabe aufzeichnen können. Dazu gibt es verschiedene Möglichkeiten:

Wenn diese Voraussetzungen erfüllt sind, kann jedes vom Player erzeugte Audio aufgenommen werden.

Systemerfassung deaktivieren

Die oben beschriebenen Schutzmaßnahmen, die die Erfassung ermöglichen, 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 wird empfohlen, dass Apps dem System die Aufnahme ihrer Wiedergabe ermöglichen. In dem seltenen Fall, dass Sie nicht möchten, dass das System die Wiedergabe Ihrer App aufzeichnet, 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, wenn Sie die Methode aufrufen, wird das Audio nicht beeinflusst. 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. Eine App, deren Manifest beispielsweise setAllowedCapturePolicy="false" enthält, erlaubt niemals, dass Nicht-System-Apps ihre Audioinhalte aufnehmen, selbst wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL festgelegt ist. Wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL festgelegt ist und im Manifest setAllowedCapturePolicy="true" festgelegt ist, die AudioAttributes des Media-Players aber mit AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) erstellt wurden, kann dieser Media-Player nicht von Nicht-System-Apps erfasst werden.

In der folgenden Tabelle wird die Wirkung des Manifestattributs und der wirksamen Richtlinie zusammengefasst:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true jede App Nur System Keine Aufnahme
false Nur System Nur System Keine Aufnahme