Eine App kann das Video- oder Audiomaterial aufnehmen, das in einer anderen App wiedergegeben wird. Ein solches
müssen Apps
MediaProjection
Token
korrekt sind. 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 abgespielten Inhalte aufzeichnen.
Umgang mit einem MediaProjection
-Token
Die MediaProjection
API
Ermöglicht Apps, ein MediaProjection
-Token zu erhalten, mit dem sie einmaligen Zugriff erhalten
um Bildschirminhalte oder Audioinhalte zu erfassen. 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
Virtuelle Displays oder Audiostreams, die mit der Sitzung verknüpft sind, empfangen nicht mehr
Medien-Streams. Ihre App muss entsprechend reagieren, andernfalls wird weiterhin Audiostille oder ein schwarzer Videostream aufgezeichnet.
Registrieren Sie einen Callback im MediaProjection
, um den Verlust eines Tokens zu verarbeiten.
Instanz mithilfe der Methode
registerCallback
und die Aufzeichnung beenden,
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.
Sie können die DevicePolicyManager
verwenden
um die Bildschirmaufzeichnung zu verhindern. Bei Enterprise-Konten (Android for Work) kann der Administrator die Erhebung von Assistentendaten für das Arbeitsprofil mithilfe der Methode setScreenCaptureDisabled deaktivieren.
Codelab Android-Geräte ohne App verwalten zeigt, wie Screenshots verboten werden.
Audiowiedergabe aufnehmen
Die AudioPlaybackCapture API wurde in Android 10 eingeführt. Diese API ermöglicht es Apps, Audioinhalte aus anderen Apps zu kopieren. Diese Funktion ist das Äquivalent zur Bildschirmaufnahme, aber für Audio. Primärer Anwendungsfall für Streaming-Apps, die den Ton von Spielen aufzeichnen 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 bei der Aufzeichnung der Wiedergabe einige Einschränkungen. Damit eine App Audio aufnehmen kann, muss sie folgende Anforderungen erfüllen:
- Die App muss die Berechtigung
RECORD_AUDIO
haben. - Die App muss die Aufforderung einblenden,
MediaProjectionManager.createScreenCaptureIntent()
, und der Nutzer muss es genehmigen. - Die Apps zum Erfassen und Abspielen müssen sich im selben Nutzerprofil befinden.
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:
- Rufen Sie
AudioPlaybackCaptureConfiguration.Builder.build()
auf, um einenAudioPlaybackCaptureConfiguration
zu erstellen. - Übergeben Sie die Konfiguration an die
AudioRecord
, indem Sie Folgendes aufrufen:setAudioPlaybackCaptureConfig
Audioaufnahme steuern
Deine App kann festlegen, welche Arten von Inhalten aufgezeichnet werden dürfen und welche anderen eigene Wiedergaben aufzeichnen.
Aufnahme durch Audioinhalte einschränken
Eine App kann einschränken, welche Audiodaten sie aufnehmen kann, indem sie diese verwenden Methoden:
- Übergeben Sie eine
AUDIO_USAGE
an AudioPlaybackCaptureConfiguration.addMatchingUsage(), um die Erfassung einer bestimmten Nutzung zuzulassen. Rufen Sie die Methode mehrmals auf, um mehr als eine Nutzung anzugeben. - Übergeben Sie
AUDIO_USAGE
an AudioRecordingCaptureConfiguration.excludeUsage(), um es verbieten, diese Nutzung zu erfassen. Rufen Sie die Methode mehrmals auf, um mehr als eine Nutzung anzugeben. - Übergeben Sie eine UID an AudioPlaybackCaptureConfiguration.addMatchingUid(), um nur Apps mit einer bestimmten UID zu erfassen. Rufen Sie die Methode mehrmals auf, um mehr als eine UID anzugeben.
- Übergeben Sie eine UID an AudioPlaybackCaptureConfiguration.excludeUid(), um die Erfassung dieser UID zu unterbinden. Rufen Sie die Methode mehrmals auf, um mehrere UIDs anzugeben.
Die Methoden addMatchingUsage()
und excludeUsage()
können nicht verwendet werden.
miteinander verbinden. 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 Audioaufnahmen machen können. Der Ton einer App kann nur aufgenommen werden, wenn die App die folgenden Anforderungen erfüllt:
Nutzung
Der Player, der den Audio erzeugt, muss seine Nutzung festlegen.
an USAGE_MEDIA
,
USAGE_GAME
oder
USAGE_UNKNOWN
Erfassungsrichtlinie
Die Erfassungsrichtlinie des Spielers muss
AudioAttributes.ALLOW_CAPTURE_BY_ALL
,
sodass andere Apps die Wiedergabe aufzeichnen können. Dazu gibt es mehrere Möglichkeiten:
- Wenn Sie die Aufzeichnung für alle Spieler aktivieren möchten, fügen Sie
android:allowAudioPlaybackCapture="true"
in die Dateimanifest.xml
der App ein. - Du kannst auch die Aufnahme für alle Spieler aktivieren, indem du
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
- Du kannst die Richtlinie für einen einzelnen Player festlegen, wenn du ihn mit
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
(Wenn SieAAudio
verwenden, rufen SieAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
)
Wenn diese Voraussetzungen erfüllt sind, kann jegliche Audioausgabe des Players aufgezeichnet werden.
Systemerfassung wird deaktiviert
Die oben beschriebenen Schutzmaßnahmen, die die Erfassung zulassen, gelten nur für Apps. Android-Geräte
Systemkomponenten können die Wiedergabe standardmäßig aufzeichnen.
Viele dieser Komponenten werden von Android-Anbietern angepasst und unterstützen Funktionen.
wie Barrierefreiheit und Untertitelung. Aus diesem Grund wird empfohlen, dass Apps dem System erlauben, die Wiedergabe aufzuzeichnen. 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 während der 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 abgespielt wird
wenn Sie die Methode aufrufen, 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 Richtlinie für die Erfassung angewendet. Beispiel: Eine App,
Wenn das Manifest enthält, setAllowedCapturePolicy="false"
lässt dies nie außerhalb des Systems zu
Apps den Ton erfassen, auch wenn AudioManager#setAllowedCapturePolicy
eingestellt ist
an ALLOW_CAPTURE_BY_ALL
. 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 sind die Auswirkungen des Manifest-Attributs und des geltende Richtlinie:
allowAudioPlaybackCapture | GROẞBUCHSTABEN_ÜBER_ALL_ZULASSEN | ALLOW_CAPTURE_BY_SYSTEM | GROẞBUCHSTABEN_durch_Keine_zulassen |
---|---|---|---|
wahr | in jeder App | Nur System | Keine Aufnahme |
false | Nur System | Nur System | keine Aufnahme |