應用程式可以錄製從其他應用程式播放的影片或音訊。這些
應用程式必須處理
MediaProjection
權杖
正確。本頁將說明相關做法。以及裝置管理員可以如何停用這個模組
錄製任何螢幕畫面快照,以及音訊應用程式可如何防止
幹擾其他應用程式的播放過程。
如何處理 MediaProjection
權杖
MediaProjection
API
可讓應用程式取得 MediaProjection
權杖,供應用程式取得一次性存取權
擷取螢幕畫面內容或音訊Android 作業系統會要求使用者
授予應用程式權限。
OS 會在「快速設定」使用者介面中顯示有效的 MediaProjection
權杖,並
使用者可隨時撤銷權杖的存取權。發生這種情況時
與工作階段相關聯的虛擬螢幕或音訊串流會停止接收
媒體串流。您的應用程式必須妥善回應,否則會繼續
錄製無聲音訊或影片串流。
如要處理權杖遺失的問題,請在 MediaProjection
上註冊回呼
使用
registerCallback
方法,並在偵測到
onStop
方法。
詳情請參閱「媒體投影」。
錄影
詳情請參閱 「螢幕畫面擷取」範例應用程式 瞭解如何使用 Media Projection API 擷取裝置的 顯示在 SurfaceView 上
您可以使用 DevicePolicyManager
。如果是公司帳戶 (Android for Work),請參閱
管理員可以停用工作資料夾的 Google 助理資料收集功能
方法是使用
setScreenCaptureDisabled
方法。
程式碼研究室 管理沒有應用程式的 Android 裝置 中的規定。
擷取音訊播放
Android 10 導入了 AudioPlaybackCapture API。這個 API 可讓應用程式複製其他應用程式正在播放的音訊。這個 特徵是螢幕畫面擷取的類比,但僅用於音訊。主要用途是 ,以擷取遊戲播放的音訊。
請注意,AudioPlaybackCapture API 不會影響音訊所屬應用程式的延遲時間 如畫面所示
建構擷取應用程式
基於安全和隱私考量,播放擷取功能會有一些限制。 應用程式必須符合下列條件,才能擷取音訊:
- 應用程式必須具備
RECORD_AUDIO
敬上 權限。 - 應用程式必須根據
MediaProjectionManager.createScreenCaptureIntent()
、 且使用者必須核准 - 擷取和播放的應用程式必須在同一個使用者設定檔中。
如要從其他應用程式擷取音訊,應用程式必須建構
AudioRecord
物件
並新增
AudioPlaybackCaptureConfiguration
先前提過
執行個體對於分配到的外部 IP 位址一無所知請按照下列步驟操作:
- 呼叫
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 供應商自訂及支援功能
例如無障礙功能和字幕因此我們建議
允許系統擷取其播放內容在極少數的情況下
您希望系統擷取應用程式的播放,請將擷取政策設為
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)
,然後
非系統應用程式不支援這個媒體播放器。
下表摘要列出資訊清單屬性和 有效政策:
允許音訊播放擷取 | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
true | 任何應用程式 | 僅限系統 | 不擷取 |
false | 僅限系統 | 僅限系統 | 不擷取 |