Android Q 音頻獲取指南

做者: Don Turner, 開發技術推廣工程師, Android Media 團隊html

Android Q 新引入的 AudioPlaybackCapture API 容許應用獲取其它應用中的音頻。在這個 API 的幫助下,開發者將順利處理多種業務場景,爲用戶提供輕鬆簡便的內容分享與無障礙體驗。android

部分常見用例包括:編程

  • 實時字幕: 爲正在播放的音頻文件提供實時字幕和翻譯。實際上,今年 I/O 開發者大會上展現的 Live Caption 示例應用就利用了該 API 開發。Live Caption 爲用戶創造了一種全新的音頻交互方式,例如在公共場所沒有耳機來收聽音頻,而這些體驗在此以前是沒法或者很難實現的。
  • 遊戲錄音與直播: 錄製遊戲內聲音,並將它們直播給線上觀衆,進而擴大遊戲內容的社交影響力。

不過,在某些狀況下,開發者可能並不但願本身應用的音頻被獲取。本文解釋了音頻獲取對用戶的影響,並介紹了一些防止獲取的具體操做,在必要時,開發者們能夠經過這些操做以禁止其它應用獲取本身的音頻。bash

用戶界面長什麼樣?

爲了獲取其它應用的音頻,應用必須首先從用戶那裏得到 RECORD_AUDIO 權限app

△ RECORD_AUDIO 權限對話框

此外,應用還需在獲取開始前調用 MediaProjectionManager.createScreenCaptureIntent(),這會向用戶顯示以下對話框:ui

△ 屏幕獲取 intent 對話框
用戶點擊 "如今開始" 後,獲取會話便會正式啓動,屆時,設備上的視頻和音頻均會被獲取。

△ 左一紅色的是投射圖標
在獲取過程當中,狀態欄中的投射圖標會一直處於紅色狀態。

個人應用中的音頻會被獲取嗎?

應用中的音頻在默認設置下可否被獲取,取決於應用的目標 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 開發者官方文檔查看。

點擊這裏提交產品反饋建議

相關文章
相關標籤/搜索