Une application peut enregistrer la vidéo ou le contenu audio en cours de lecture à partir d'une autre application. Telles
les applications doivent gérer
Jeton MediaProjection
correctement. Cette page explique comment procéder. Il montre également comment un administrateur
de l'appareil peut désactiver
la possibilité d'enregistrer des instantanés d'écran et comment une application audio peut empêcher
d'autres applications d'enregistrer le contenu lu.
Gérer un jeton MediaProjection
L'API MediaProjection
permet aux applications d'acquérir un jeton MediaProjection
qui leur donne un accès unique
pour capturer le contenu de l'écran ou l'audio. Le système d'exploitation Android demande à l'utilisateur
l'autorisation avant d'accorder le jeton à votre application.
L'OS affiche les jetons MediaProjection
actifs dans l'interface utilisateur des Réglages rapides.
permet aux utilisateurs de retirer l'accès à un jeton à tout moment. Dans ce cas,
des écrans virtuels ou des flux audio associés à la session cessent de recevoir
des flux multimédias. Votre application doit répondre de manière appropriée, sinon elle continuera
pour enregistrer une silence audio ou un flux vidéo noir.
Pour gérer la perte d'un jeton, enregistrez un rappel sur le MediaProjection
.
à l'aide de la méthode
registerCallback
, puis arrêtez l'enregistrement lorsque
onStop
est appelée.
Pour en savoir plus, consultez la section Projection multimédia.
Enregistrer une vidéo
Consultez le Application exemple ScreenCapture pour apprendre à utiliser l'API Media Projection pour capturer l'activité à l'écran en temps réel et l'afficher sur une SurfaceView.
Vous pouvez utiliser le DevicePolicyManager
pour empêcher l'enregistrement de l'écran. Pour les comptes d'entreprise (Android for Work),
l'administrateur peut désactiver la collecte des données concernant l'assistant pour le profil professionnel
à l'aide de la commande
setScreenCaptureDisabled
.
L'atelier de programmation Gérer des appareils Android sans application montre comment interdire les captures d'écran.
Enregistrer la lecture audio
L'API AudioPlaybackCapture a été introduite dans Android 10. Cette API permet aux applications de copier le contenu audio lu par d'autres applications. Ce est comparable à la capture d'écran, mais pour l'audio. Le cas d'utilisation principal pour les applications de streaming qui souhaitent enregistrer le son des jeux.
Notez que l'API AudioPlaybackCapture n'affecte pas la latence de l'application dont le contenu audio est en cours de capture.
Créer une application de capture
Pour des raisons de sécurité et de confidentialité, la capture vidéo impose certaines limites. Pour enregistrer du contenu audio, votre application doit remplir les conditions suivantes:
- L'application doit disposer du paramètre
RECORD_AUDIO
l'autorisation. - L'application doit afficher l'invite affichée par
MediaProjectionManager.createScreenCaptureIntent()
et l'utilisateur doit l'approuver. - Les applications de capture et de lecture doivent se trouver dans le même profil utilisateur.
Pour enregistrer du contenu audio à partir d'une autre application, celle-ci doit créer un
Objet AudioRecord
et ajoutez
AudioPlaybackCaptureConfiguration
avec lui. Procédez comme suit :
- Appeler
AudioPlaybackCaptureConfiguration.Builder.build()
pour créerAudioPlaybackCaptureConfiguration
- Transmettez la configuration à
AudioRecord
en appelantsetAudioPlaybackCaptureConfig
Contrôler la capture audio
Votre application peut contrôler les types de contenus qu'elle peut enregistrer et les autres d'applications peuvent enregistrer leur propre lecture.
Limiter la capture par contenu audio
Une application peut limiter le contenu audio qu'elle peut capturer en utilisant ces méthodes:
- Transmettez un
AUDIO_USAGE
à AudioPlaybackCaptureConfiguration.addMatchingUsage() pour déterminer une utilisation spécifique. Appelez la méthode plusieurs fois pour spécifier plusieurs utilisations. - Transmettez un élément
AUDIO_USAGE
à AudioPlaybackCaptureConfiguration.excludedUsage() pour interdire de capturer cette utilisation. Appelez la méthode plusieurs fois pour spécifier plusieurs utilisations. - Transmettre un UID à AudioPlaybackCaptureConfiguration.addMatchingUid() pour ne capturer que les applications ayant un UID spécifique. Appelez la méthode plusieurs fois pour spécifier plusieurs UID.
- Transmettez un UID à AudioPlaybackCaptureConfiguration.ExcludeUid() pour interdire la capture de cet UID. Appelez la méthode plusieurs fois pour spécifier plusieurs UID.
Notez que vous ne pouvez pas utiliser les méthodes addMatchingUsage()
et excludeUsage()
.
ensemble. Vous devez choisir l'une ou l'autre de ces options. De même, vous ne pouvez pas utiliser addMatchingUid()
ni excludeUid()
.
en même temps.
Limiter la capture par d'autres applications
Vous pouvez configurer une application de manière à empêcher les autres applications d'enregistrer son contenu audio. Le contenu audio provenant d'une application ne peut être enregistré que si celle-ci remplit les conditions suivantes:
Utilisation
Le lecteur qui produit le contenu audio doit définir son utilisation.
à USAGE_MEDIA
,
USAGE_GAME
ou
USAGE_UNKNOWN
Règle de capture
La règle de capture du joueur doit être
AudioAttributes.ALLOW_CAPTURE_BY_ALL
ce qui permet à d'autres applications d'enregistrer la lecture. Pour ce faire, vous disposez de différentes méthodes:
- Pour activer la capture sur tous les joueurs, incluez
android:allowAudioPlaybackCapture="true"
dans l'applimanifest.xml
. - Vous pouvez également activer la capture sur tous les joueurs en appelant
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
- Vous pouvez définir la règle pour un joueur individuel lorsque vous le créez à l'aide de
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
(Si vous utilisezAAudio
, appelezAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
).
Si ces conditions sont remplies, tout contenu audio produit par le lecteur peut être capturé.
Désactivation de la capture système
Les protections permettant la capture décrites ci-dessus ne s'appliquent qu'aux applications. Android
les composants système peuvent capturer la lecture par défaut.
Bon nombre de ces composants sont personnalisés par les fournisseurs Android et proposent des fonctionnalités de prise en charge
comme l'accessibilité
et le sous-titrage. C'est pourquoi nous recommandons aux applications
permettent au système d'enregistrer leur vidéo. Dans les rares cas où vous ne
souhaitez que le système enregistre la lecture de votre application, définissez la règle de capture sur
ALLOW_CAPTURE_BY_NONE
Définir la règle au moment de l'exécution
Vous pouvez appeler AudioManager.setAllowedCapturePolicy()
pour modifier la capture
lorsqu'une application est en cours d'exécution. Si un MediaPlayer ou une piste audio est en cours de lecture
lorsque vous appelez la méthode, l'audio n'est pas affecté. Vous devez fermer et rouvrir
pour que la modification de la règle prenne effet.
Règle = fichier manifeste + AudioManager + AudioAttributes
La règle de capture pouvant être spécifiée à plusieurs endroits, il est important
pour comprendre comment la règle en vigueur est déterminée.
La règle de capture la plus restrictive est toujours appliquée. Par exemple, une application dont
le fichier manifeste inclut setAllowedCapturePolicy="false"
n'autorisera jamais
applis pour enregistrer le son, même si AudioManager#setAllowedCapturePolicy
est défini
à ALLOW_CAPTURE_BY_ALL
. De même, si le
AudioManager#setAllowedCapturePolicy
est défini sur ALLOW_CAPTURE_BY_ALL
, et
le fichier manifeste définit setAllowedCapturePolicy="true"
, mais la fonction
AudioAttributes
ont été construits avec
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, puis
ce lecteur multimédia ne pourra pas être capturé par des applications autres que le système.
Le tableau ci-dessous récapitule les effets de l'attribut "manifest" et de l'attribut politique en vigueur:
allowAudioPlaybackCapture | AUTORISER_TOUT_CAPTURE_PAR_TOUT | AUTORISER_CAPTURE_PAR_SYSTÈME | AUTORISER_CAPTURE_BY_NONE |
---|---|---|---|
vrai | n'importe quelle application | système uniquement | aucune capture |
faux | système uniquement | système uniquement | aucune capture |