您可以使用汽车的 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