アプリは、別のアプリから再生されている動画や音声を記録できます。そのような
アプリは
MediaProjection
トークン
確認します。このページではその方法について説明します。また、デバイス管理者がスペースを無効にし、
画面のスナップショットを記録する機能と、オーディオアプリが
他のアプリが再生コンテンツを録画しないように設定できます。
MediaProjection
トークンの処理方法
MediaProjection
API
アプリが 1 回限りのアクセスを提供する MediaProjection
トークンを取得できるようにします
画面上のコンテンツや音声をキャプチャできます。Android OS がユーザーに
権限を宣言する必要があります。
OS のアクティブな MediaProjection
トークンがクイック設定 UI に表示され、
ユーザーはいつでもトークンへのアクセス権を取り消すことができます。この場合
セッションに関連付けられた仮想ディスプレイや音声ストリームの受信が停止します。
作成できますアプリは適切に応答する必要があります。適切に応答しないと、処理が続行されます
サイレント モードや黒い動画ストリームを録画できます。
トークンの損失を処理するには、MediaProjection
にコールバックを登録します。
使用してインスタンスを
registerCallback
メソッドが呼び出され、
onStop
メソッドが呼び出されます。
詳細については、メディア プロジェクションをご覧ください。
動画を撮影
詳しくは、 ScreenCapture サンプルアプリ Media Projection API を使用してデバイスの画像をキャプチャする SurfaceView に表示できます。
DevicePolicyManager
を使用できます。
画面の録画はできません企業アカウント(Android for Work)の場合、
管理者は、仕事用プロファイルによるアシスタント データの収集を無効にできます
使用して
setScreenCaptureDisabled
メソッドを呼び出します。
Codelab アプリなしで Android デバイスの管理 スクリーンショットを禁止する方法を示しています。
音声再生をキャプチャする
Android 10 で AudioPlaybackCapture API が導入されました。この API 他のアプリで再生されている音声をアプリがコピーできるようにします。この 機能はスクリーン キャプチャのアナログですが、音声のみを目的としています。主なユースケースは 。
AudioPlaybackCapture API は、音声が再生されるアプリのレイテンシには 表示されます。
キャプチャ アプリのビルド
セキュリティとプライバシーのため、再生キャプチャにはいくつかの制限があります。 音声をキャプチャするには、アプリが次の要件を満たしている必要があります。
- アプリは
RECORD_AUDIO
付与します。 - アプリによって表示されるプロンプトが
MediaProjectionManager.createScreenCaptureIntent()
ユーザーが承認する必要があります。 - キャプチャ アプリと再生アプリが同じユーザー プロファイルに含まれている必要があります。
別のアプリから音声を取り込むには、アプリで
AudioRecord
オブジェクト
追加
AudioPlaybackCaptureConfiguration
追加できます。手順:
AudioPlaybackCaptureConfiguration.Builder.build()
を呼び出す 構築するためのAudioPlaybackCaptureConfiguration
。- 以下を呼び出して、構成を
AudioRecord
に渡します。setAudioPlaybackCaptureConfig
。
音声キャプチャの制御
アプリは、記録できるコンテンツの種類や、他に記録できるコンテンツの種類、 再生を録画できます。
音声コンテンツによるキャプチャの制限
アプリは、以下の設定を使用して、キャプチャできる音声を制限できます。 メソッド:
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 | システムのみ | システムのみ | キャプチャなし |