Eine App kann das Video- oder Audiomaterial aufnehmen, das in einer anderen App wiedergegeben wird. Ein solches
müssen Apps mit der
MediaProjection
Token
korrekt sind. Auf dieser Seite wird die Vorgehensweise beschrieben. Außerdem wird gezeigt, wie ein Geräteadministrator die
die Möglichkeit, Bildschirm-Snapshots aufzunehmen, und wie eine Audio-App verhindern kann,
andere Apps die Inhalte aufzeichnen,
die wiedergegeben werden.
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 nach seinem
bevor Sie Ihrer App das Token gewähren.
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. Deine App muss entsprechend reagieren, andernfalls wird sie fortgesetzt
zum Aufzeichnen von Audiostumm oder eines schwarzen Videostreams.
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
Weitere Informationen finden Sie in der Beispiel-App für die Bildschirmaufnahme erfahren Sie, wie Sie mit der Media Projection API die in Echtzeit und auf SurfaceView.
Sie können die DevicePolicyManager
verwenden
um die Bildschirmaufzeichnung zu verhindern. Für Unternehmenskonten (Android for Work) gilt:
Administrator kann die Erhebung von Assistant-Daten für das Arbeitsprofil deaktivieren
mit der Methode
setScreenCaptureDisabled
.
Codelab Android-Geräte ohne App verwalten zeigt, wie Screenshots verboten werden.
Audiowiedergabe aufnehmen
Mit Android 10 wurde die AudioRecordingCapture API eingeführt. Diese API ermöglicht es Apps, Audioinhalte aus anderen Apps zu kopieren. Dieses Funktion ist das Analog zur Bildschirmaufnahme, aber für Audio. Primärer Anwendungsfall für Streaming-Apps, die den Ton von Spielen aufzeichnen möchten.
Beachten Sie, dass die AudioWiedergabeCaptureCapture API keinen Einfluss auf die Latenz der App hat, deren Audioquelle geladen wird. erfasst wird.
Aufnahme-App erstellen
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
RECORD_AUDIO
Berechtigung. - Die App muss die Aufforderung einblenden, die von
MediaProjectionManager.createScreenCaptureIntent()
, und der Nutzer muss es genehmigen. - Die Apps zum Erfassen und Abspielen müssen sich im selben Nutzerprofil befinden.
Um Audio aus einer anderen App aufzunehmen, muss deine App eine
Objekt AudioRecord
und fügen Sie
AudioPlaybackCaptureConfiguration
hinzugefügt. Gehen Sie dazu so vor:
AudioPlaybackCaptureConfiguration.Builder.build()
anrufen um eineAudioPlaybackCaptureConfiguration
- Übergeben Sie die Konfiguration an die
AudioRecord
, indem Sie folgenden Befehl 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
AUDIO_USAGE
an AudioWiedergabeCaptureConfiguration.addMatchingUsage() um eine bestimmte Nutzung zu erfassen. 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 AudioRecordingCaptureConfiguration.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 AudioRecordingCaptureConfiguration.excludeUid(), um die Erfassung dieser UID zu verhindern. Rufen Sie die Methode mehrmals auf, um mehr als eine UID 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 verwenden.
aus.
Aufnahme durch andere Apps einschränken
Sie können eine App so konfigurieren, dass andere Apps keine Audioinhalte aufzeichnen. 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:
- Um die Aufnahme für alle Spieler zu aktivieren, fügen Sie
android:allowAudioPlaybackCapture="true"
in dermanifest.xml
-Datei. - 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 jeder Ton vom Player aufgenommen werden.
Systemerfassung wird deaktiviert
Die oben beschriebenen Schutzmaßnahmen, die eine Erfassung ermöglichen, 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,
damit das System die
Wiedergaben aufzeichnen kann. In dem seltenen Fall, dass Sie
das System die Wiedergabe Ihrer App aufzeichnen soll, setzen Sie die Erfassungsrichtlinie auf
ALLOW_CAPTURE_BY_NONE
Richtlinie zur Laufzeit festlegen
Du kannst AudioManager.setAllowedCapturePolicy()
anrufen, um die Aufnahme 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. Schließen und wieder öffnen
im Player oder Track, damit die Richtlinienänderung in Kraft tritt.
Richtlinie = Manifest + AudioManager + AudioAttributes
Da die Erfassungsrichtlinie an verschiedenen Stellen
festgelegt werden kann, ist es wichtig,
um zu verstehen, wie die geltende Richtlinie bestimmt wird.
Es wird immer die strengste Erfassungsrichtlinie 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 der Parameter
AudioManager#setAllowedCapturePolicy
ist auf ALLOW_CAPTURE_BY_ALL
gesetzt und der
Das Manifest legt setAllowedCapturePolicy="true"
fest, aber die
AudioAttributes
wurden mit
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, danach
kann dieser Mediaplayer nicht von systemeigenen Apps erfasst werden.
In der folgenden Tabelle sind die Auswirkungen des Manifest-Attributs und des geltende Richtlinie:
allowAudioWiedergabeCapture | GROẞBUCHSTABEN_ÜBER_ALL_ZULASSEN | GROẞBUCHSTABEN_BY_SYSTEM_ZULASSEN | GROẞBUCHSTABEN_durch_Keine_zulassen |
---|---|---|---|
wahr | alle Apps | Nur System | Keine Aufnahme |
false | Nur System | Nur System | Keine Aufnahme |