做者: Don Turner, 開發技術推廣工程師, Android Media 團隊html
Android Q 新引入的 AudioPlaybackCapture API 容許應用獲取其它應用中的音頻。在這個 API 的幫助下,開發者將順利處理多種業務場景,爲用戶提供輕鬆簡便的內容分享與無障礙體驗。android
部分常見用例包括:編程
不過,在某些狀況下,開發者可能並不但願本身應用的音頻被獲取。本文解釋了音頻獲取對用戶的影響,並介紹了一些防止獲取的具體操做,在必要時,開發者們能夠經過這些操做以禁止其它應用獲取本身的音頻。bash
爲了獲取其它應用的音頻,應用必須首先從用戶那裏得到 RECORD_AUDIO 權限。app
此外,應用還需在獲取開始前調用 MediaProjectionManager.createScreenCaptureIntent(),這會向用戶顯示以下對話框:ui
應用中的音頻在默認設置下可否被獲取,取決於應用的目標 API 等級,詳細行爲以下表所示:google
有時候,開發者可能並不但願其它應用獲取本身的音頻,好比說,當音頻包含:3d
應用的音頻獲取政策有兩種:
1.針對全部音頻。
2.針對單個音頻播放器。
您能夠經過如下兩種方式,禁止第三方應用獲取應用中的全部音頻:
1.請將下方代碼添加至 AndroidManifest.xml
<application
...
android:allowAudioPlaybackCapture="false"/>
複製代碼
2.經過編程的方式,禁止獲取行爲: 在播放音頻文件前,運行下方代碼
AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
複製代碼
若是您想限制某個播放器的獲取功能,請在建立它時設置獲取政策:
AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
複製代碼
該方法適用於播放內容包含多類受權協議的狀況,好比說,同時含有受版權保護的內容與免版稅的內容。
在默認設置下,系統應用和部件可以獲取用途爲 MEDIA (媒體), GAME (遊戲) 和 UNKNOWN (未知) 的音頻文件,這會用於支持實時字幕等重要的無障礙功能。
在極少數狀況下,開發者也但願本身可以像管理第三方應用同樣,禁止系統應用獲取音頻。請注意,當您禁止系統獲取時,任何第三方應用的獲取也將被禁止。
該操做只能經過程序方式實現,請您在播放音頻前運行如下代碼:
AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)
複製代碼
如需禁止某個播放器獲取音頻,請在建立它時設置如下獲取政策:
AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)
複製代碼
若是應用的目標 API 等級爲 28 或如下,並且您但願容許音頻獲取,請在應用的 manifest.xml 文件中添加 android:allowAudioPlaybackCapture="true"
若是您但願禁止部分或所有音頻被獲取,請根據上文所示操做更新應用。
更多內容,請前往 Android 開發者官方文檔查看。
點擊這裏提交產品反饋建議