作者: Don Turner, 開發技術推廣工程師, Android Media 團隊
Android Q 新引入的 AudioPlaybackCapture API 允許應用獲取其它應用中的音頻。在這個 API 的幫助下,開發者將順利處理多種業務場景,爲用戶提供輕鬆簡便的內容分享與無障礙體驗。
部分常見用例包括:
實時字幕: 爲正在播放的音頻文件提供實時字幕和翻譯。實際上,今年 I/O 開發者大會上展示的Live Caption 示例應用就利用了該 API 開發。Live Caption 爲用戶創造了一種全新的音頻交互方式,例如在公共場所沒有耳機來收聽音頻,而這些體驗在此之前是無法或者很難實現的。
遊戲錄音與直播: 錄製遊戲內聲音,並將它們直播給線上觀衆,進而擴大遊戲內容的社交影響力。
不過,在某些情況下,開發者可能並不希望自己應用的音頻被獲取。本文解釋了音頻獲取對用戶的影響,並介紹了一些防止獲取的具體操作,在必要時,開發者們可以通過這些操作以禁止其它應用獲取自己的音頻。
用戶界面長什麼樣?
爲了獲取其它應用的音頻,應用必須首先從用戶那裏獲得 RECORD_AUDIO 權限。
此外,應用還需在獲取開始前調用 MediaProjectionManager.createScreenCaptureIntent(),這會向用戶顯示如下對話框:
用戶點擊 "現在開始" 後,獲取會話便會正式啓動,屆時,設備上的視頻和音頻均會被獲取。
在獲取過程中,狀態欄中的投射圖標會一直處於紅色狀態。
我的應用中的音頻會被獲取嗎?
應用中的音頻在默認設置下能否被獲取,取決於應用的目標 API 等級,詳細行爲如下表所示:
禁止第三方應用獲取音頻
有時候,開發者可能並不希望其它應用獲取自己的音頻,比如說,當音頻包含:
>敏感信息,如私人錄音。
>受版權保護的材料,如版權音樂或從影視作品中截取的音頻選段。
應用的音頻獲取政策有兩種:
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 開發者官方文檔查看。
點擊這裏提交產品反饋建議