Anda dapat menggunakan CarAppService dan CarAudioRecord API
mobil untuk memberikan akses aplikasi ke mikrofon mobil pengguna. Pengguna harus memberikan izin kepada aplikasi Anda untuk mengakses mikrofon mobil. Aplikasi Anda dapat merekam dan memproses input pengguna di aplikasi Anda.
Mendeklarasikan izin untuk merekam
Sebelum merekam audio apa pun, Anda harus mendeklarasikan izin untuk merekam di AndroidManifest.xml dan meminta pengguna untuk memberikannya.
<manifest ...>
...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
...
</manifest>
Anda harus meminta izin untuk merekam saat runtime. Untuk mempelajari lebih lanjut cara meminta izin di mobil, lihat Meminta izin.
Merekam audio
Setelah pengguna memberikan izin untuk merekam, Anda dapat merekam audio dan memproses rekaman.
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()
Memperoleh fokus audio
Saat merekam dari mikrofon mobil, Anda harus memperoleh fokus audio terlebih dahulu. Tindakan ini akan menghentikan media yang sedang berlangsung. Jika Anda kehilangan fokus audio, hentikan perekaman. Misalnya, untuk memperoleh fokus audio:
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