คุณสามารถใช้ 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