您可以使用車輛的 CarAppService 和 CarAudioRecord API,授予應用程式存取使用者車輛麥克風的權限。使用者必須授予應用程式存取車輛麥克風的權限。應用程式可以記錄及處理使用者在應用程式中輸入的內容。
宣告錄音權限
錄製音訊前,您必須先在 AndroidManifest.xml 中宣告錄音權限,並要求使用者授予該權限。
<manifest ...>
...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
...
</manifest>
您必須在執行階段要求錄音權限。如要進一步瞭解如何在車輛中要求權限,請參閱「要求權限」。
錄音
使用者授權錄音後,您就可以錄製音訊並處理錄音內容。
val carAudioRecord = CarAudioRecord.create(carContext) carAudioRecord.startRecording() val data = ByteArray(CarAudioRecord.AUDIO_CONTENT_BUFFER_SIZE) while (carAudioRecord.read(data, 0, CarAudioRecord.AUDIO_CONTENT_BUFFER_SIZE) >= 0) { // Use data array // Potentially call carAudioRecord.stopRecording() if your processing finds end of speech } carAudioRecord.stopRecording()
取得音訊焦點
如要使用車輛麥克風錄音,必須先取得音訊焦點。 這麼做會停止播放任何媒體。如果失去音訊焦點,請停止錄音。舉例來說,如要取得音訊焦點:
val carAudioRecord = CarAudioRecord.create(carContext) // Take audio focus so that user's media is not recorded val audioAttributes = AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) // Use the most appropriate usage type for your use case .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE) .build() val audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE) .setAudioAttributes(audioAttributes) .setOnAudioFocusChangeListener { state: Int -> if (state == AudioManager.AUDIOFOCUS_LOSS) { // Stop recording if audio focus is lost carAudioRecord.stopRecording() } } .build() val audioManager = carContext.getSystemService(AudioManager::class.java) if (audioManager == null || audioManager.requestAudioFocus(audioFocusRequest) != AudioManager.AUDIOFOCUS_REQUEST_GRANTED ) { // Don't record if the focus isn't granted return } carAudioRecord.startRecording() // Process the audio and abandon the AudioFocusRequest when done