Video- und Audiowiedergabe aufnehmen

Eine App kann Video- oder Audioinhalte aufzeichnen, die von einer anderen App wiedergegeben werden. Diese Apps müssen das MediaProjection-Token richtig verarbeiten. Auf dieser Seite erfahren Sie, wie das geht. Außerdem erfahren Sie, 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.

So verarbeiten Sie ein MediaProjection-Token

Mit der MediaProjection API können Apps ein MediaProjection-Token abrufen, mit dem sie einmalig Zugriff auf Bildschirminhalte oder Audioinhalte erhalten. Das Android-Betriebssystem fragt den Nutzer nach seiner Zustimmung, bevor das Token an Ihre App weitergegeben wird.

Das Betriebssystem zeigt die aktiven MediaProjection-Tokens in der Benutzeroberfläche der Schnelleinstellungen an. Nutzer können den Zugriff auf ein Token jederzeit widerrufen. In diesem Fall empfangen die mit der Sitzung verknüpften virtuellen Displays oder Audiostreams keine Medienstreams mehr. Ihre App muss angemessen reagieren. Andernfalls wird weiterhin Audio ohne Ton oder ein schwarzer Videostream aufgezeichnet.

Um den Verlust eines Tokens abzufangen, 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 „Bildschirmaufnahme“ erfahren Sie, wie Sie mit der Media Projection API den Bildschirm eines Geräts in Echtzeit erfassen und auf einer SurfaceView anzeigen können.

Mit DevicePolicyManager kannst du die Bildschirmaufzeichnung verhindern. Bei Unternehmenskonten (Android for Work) kann der Administrator die Erhebung von Assistant-Daten für das Arbeitsprofil mithilfe der Methode setScreenCaptureDisabled deaktivieren.

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

Audiowiedergabe aufnehmen

Die AudioWiedergabeCapture API wurde mit Android 10 eingeführt. Mit dieser API können Apps das Audio kopieren, das von anderen Apps wiedergegeben wird. Diese Funktion ist analog zur Bildschirmaufnahme, nur für Audio. Der primäre Anwendungsfall sind Streaming-Apps, die das von Spielen gespielte Audio aufzeichnen möchten.

Die AudioWiedergabeCapture API hat keinen Einfluss auf die Latenz der App, deren Audio aufgenommen wird.

Aufnahme-App erstellen

Aus Sicherheits- und Datenschutzgründen gelten bei der Wiedergabe einige Einschränkungen. Damit Sie Audio aufnehmen können, muss eine App die folgenden Anforderungen erfüllen:

Wenn Sie Audioinhalte aus einer anderen Anwendung erfassen möchten, muss die Anwendung ein AudioRecord-Objekt erstellen und diesem ein AudioPlaybackCaptureConfiguration-Element 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 AudioRecord, indem Sie setAudioPlaybackCaptureConfig aufrufen.

Audioaufnahme steuern

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

Aufnahme durch Audioinhalte einschränken

Eine Anwendung kann mit den folgenden Methoden einschränken, welche Audiodaten erfasst werden können:

Die Methoden addMatchingUsage() und excludeUsage() können nicht zusammen verwendet werden. Sie müssen eine der beiden Optionen auswählen. 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 ihr Audio nicht aufnehmen können. Der Ton einer App kann nur aufgenommen werden, wenn die App die folgenden Anforderungen erfüllt:

Nutzung

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

Aufnahmerichtlinie

Die Aufnahmerichtlinie des Players muss AudioAttributes.ALLOW_CAPTURE_BY_ALL sein, damit andere Apps die Wiedergabe erfassen können. Dafür gibt es mehrere Möglichkeiten:

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

Systemerfassung deaktivieren

Die oben beschriebenen Schutzmaßnahmen, die eine Erfassung ermöglichen, gelten nur für Apps. Android-Systemkomponenten können die Wiedergabe standardmäßig erfassen. Viele dieser Komponenten wurden von Android-Anbietern angepasst und unterstützen Funktionen wie Bedienungshilfen und Untertitelung. Aus diesem Grund wird empfohlen, dem System die Erfassung der Wiedergabe durch Apps zu ermöglichen. In dem seltenen Fall, dass das System die Wiedergabe deiner App nicht erfassen soll, setze die Erfassungsrichtlinie auf ALLOW_CAPTURE_BY_NONE.

Richtlinie zur Laufzeit festlegen

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

Richtlinie = Manifest + AudioManager + AudioAttribute

Da die Aufnahmerichtlinie an mehreren Stellen festgelegt werden kann, ist es wichtig zu verstehen, wie die geltende Richtlinie bestimmt wird. Es wird immer die restriktivste Aufnahmerichtlinie angewendet. Beispielsweise erlaubt eine App, deren Manifest setAllowedCapturePolicy="false" enthält, niemals systemfremden Apps die Aufzeichnung der Audiodaten, selbst wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL festgelegt ist. Wenn AudioManager#setAllowedCapturePolicy auf ALLOW_CAPTURE_BY_ALL gesetzt ist und das Manifest setAllowedCapturePolicy="true" festlegt, AudioAttributes des Mediaplayers aber mit AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM) erstellt wurde, kann dieser Mediaplayer nur von System-Apps erfasst werden.

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

Audiowiedergabe-Aufnahme zulassen ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true Beliebige App Nur System keine Aufnahme
false Nur System Nur System keine Aufnahme