アプリは、別のアプリから再生されている動画や音声を記録できます。そのような
アプリは
MediaProjection
トークン
確認します。このページではその方法について説明します。また、デバイス管理者が画面のスナップショットを録画する機能を無効にする方法と、オーディオ アプリが他のアプリが再生するコンテンツを録画できないようにする方法についても説明します。
MediaProjection
トークンを処理する方法
MediaProjection
API を使用すると、アプリは MediaProjection
トークンを取得できます。このトークンにより、画面のコンテンツや音声をキャプチャするための 1 回限りのアクセス権が付与されます。Android OS は、アプリにトークンを付与する前にユーザーに権限を求めます。
OS は、アクティブな MediaProjection
トークンをクイック設定 UI に表示し、ユーザーはトークンへのアクセス権をいつでも取り消すことができます。この場合、
セッションに関連付けられた仮想ディスプレイや音声ストリームの受信が停止します。
ストリーミングできますアプリは適切に応答する必要があります。適切に応答しないと、処理が続行されます
サイレント モードや黒い動画ストリームを録画できます。
トークンの損失を処理するには、MediaProjection
にコールバックを登録します。
使用してインスタンスを
registerCallback
メソッドが呼び出され、
onStop
メソッドが呼び出されます。
詳しくは、メディア プロジェクションをご覧ください。
動画を撮影
詳しくは、 ScreenCapture サンプルアプリ Media Projection API を使用してデバイスの SurfaceView に表示できます。
DevicePolicyManager
を使用できます。
画面の録画はできません企業アカウント(Android for Work)の場合、
管理者は、仕事用プロファイルによるアシスタント データの収集を無効にできます
使用して
setScreenCaptureDisabled
メソッドを呼び出します。
アプリを使用しない Android デバイスの管理の Codelab では、スクリーンショットを禁止する方法について説明しています。
音声再生をキャプチャする
AudioPlaybackCapture API は Android 10 で導入されました。この API は、他のアプリで再生されている音声をコピーする機能をアプリに提供します。この機能はアナログの画面キャプチャですが、音声用です。主なユースケースは 。
AudioPlaybackCapture API は、音声を出力するアプリのレイテンシには 表示されます。
キャプチャ アプリのビルド
セキュリティ確保とプライバシー保護のため、再生キャプチャにはいくつかの制限があります。音声のキャプチャを可能にするには、アプリが次の要件を満たしている必要があります。
- アプリは、
RECORD_AUDIO
付与します。 - アプリによって表示されるプロンプトが
MediaProjectionManager.createScreenCaptureIntent()
ユーザーが承認する必要があります - キャプチャ アプリと再生アプリが同じユーザー プロファイルに含まれている必要があります。
別のアプリから音声をキャプチャするには、アプリで AudioRecord
オブジェクトを作成して、AudioPlaybackCaptureConfiguration
を追加する必要があります。手順:
AudioPlaybackCaptureConfiguration.Builder.build()
を呼び出してAudioPlaybackCaptureConfiguration
を作成します。setAudioPlaybackCaptureConfig
を呼び出して、構成をAudioRecord
に渡します。
音声キャプチャの制御
アプリは、録画できるコンテンツの種類と、独自の再生を録画できる他の種類のアプリを制御できます。
音声コンテンツによるキャプチャの制限
アプリは、以下の設定を使用して、キャプチャできる音声を制限できます。 メソッド:
AUDIO_USAGE
を AudioPlaybackCaptureConfiguration.addMatchingUsage() に渡して、特定の用途の音声のキャプチャを許可します。複数の用途を指定するには、メソッドを複数回呼び出します。AUDIO_USAGE
を AudioPlaybackCaptureConfiguration.excludeUsage() に渡して、 その使用状況のキャプチャを禁じます複数の用途を指定するには、メソッドを複数回呼び出します。- UID を AudioPlaybackCaptureConfiguration.addMatchingUid() に渡す 特定の UID を持つアプリのみをキャプチャするようにしました。メソッドを複数回呼び出して、複数の UID を指定します。
- UID を AudioPlaybackCaptureConfiguration.excludeUid() に渡して、特定の UID を持つアプリのキャプチャを禁止します。複数の UID を指定するには、メソッドを複数回呼び出します。
なお、addMatchingUsage()
メソッドと excludeUsage()
メソッドは使用できません。
説明します。どちらか一方のみを選択する必要があります。同様に、addMatchingUid()
と excludeUid()
を同時に使用することはできません。
他のアプリによるキャプチャを制限する
他のアプリが音声をキャプチャしないようにアプリを設定できます。 アプリの音声は、アプリが次の要件を満たしている場合にのみキャプチャできます。
使用方法
音声を生成するプレーヤーは、用途を設定する必要があります。
送信先: USAGE_MEDIA
、
USAGE_GAME
、または
USAGE_UNKNOWN
を選択します。
キャプチャ ポリシー
プレーヤーのキャプチャ ポリシーが AudioAttributes.ALLOW_CAPTURE_BY_ALL
である必要があります。これにより、他のアプリが再生をキャプチャできるようになります。これはさまざまな方法で設定できます。
- すべてのプレーヤーでキャプチャを有効にするには、以下を含めます。
アプリの
android:allowAudioPlaybackCapture="true"
manifest.xml
ファイル。 AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
を呼び出して、すべてのプレーヤーでキャプチャを有効にすることもできます。AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
を使用して個々のプレーヤーをビルドするときに、ポリシーを設定できます。(AAudio
を使用している場合、AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
)。
これらの前提条件が満たされている場合は、プレーヤーで生成された音声をキャプチャできます。
システム キャプチャの無効化
前述したキャプチャの許可に関する保護が適用されるのはアプリのみです。Android システム コンポーネントはデフォルトで再生をキャプチャできます。これらのコンポーネントの多くは、Android ベンダーによってカスタマイズされ、機能をサポートします。
サポートするように設計されていますそのため、Google Chat で
システムが再生をキャプチャできるようにします。システムにアプリの再生をキャプチャされないようにする場合は、キャプチャ ポリシーを ALLOW_CAPTURE_BY_NONE
に設定してください。
実行時におけるポリシーの設定
アプリの実行中に AudioManager.setAllowedCapturePolicy()
を呼び出してキャプチャ ポリシーを変更できます。MediaPlayer または AudioTrack が再生中の場合
メソッドを呼び出すとき、音声に影響はありません。いったん閉じて再度開く必要があります
プレーヤーまたはトラックでポリシーの変更が有効になるように設定します。
ポリシー = マニフェスト + AudioManager + AudioAttributes
キャプチャ ポリシーは複数の場所で指定できるため、有効なポリシーがどのように決定されるかを理解することが重要です。最も制限の厳しいキャプチャ ポリシーが常に適用されます。たとえば、
マニフェストに setAllowedCapturePolicy="false"
が含まれていると、非システム ファイルが一切許可されなくなります。
アプリが音声をキャプチャする(AudioManager#setAllowedCapturePolicy
が設定されていても)
宛先: ALLOW_CAPTURE_BY_ALL
同様に
AudioManager#setAllowedCapturePolicy
は ALLOW_CAPTURE_BY_ALL
に設定され、
マニフェストでは setAllowedCapturePolicy="true"
が設定されていますが、メディア プレーヤーの
AudioAttributes
は以下でビルドされました:
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
、その後
システム以外のアプリではこのメディア プレーヤーをキャプチャできません。
次の表は、マニフェスト属性と有効なポリシーによる影響をまとめたものです。
allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
true | すべてのアプリ | システムのみ | キャプチャなし |
false | システムのみ | システムのみ | キャプチャなし |