Mit der CarAppService und CarAudioRecord API
Ihres Autos können Sie Ihrer App Zugriff auf das Mikrofon des Autos des Nutzers gewähren. Nutzer müssen Ihrer App die Berechtigung zum Zugriff auf das Mikrofon des Autos erteilen. Ihre App kann Nutzereingaben in Ihrer App aufzeichnen und verarbeiten.
Berechtigung zum Aufzeichnen deklarieren
Bevor Sie Audio aufzeichnen, müssen Sie zuerst die Berechtigung zum Aufzeichnen in Ihrer AndroidManifest.xml deklarieren und den Nutzer bitten, sie zu erteilen.
<manifest ...>
...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
...
</manifest>
Sie müssen die Berechtigung zum Aufzeichnen zur Laufzeit anfordern. Weitere Informationen zum Anfordern von Berechtigungen in Ihrem Auto finden Sie unter Berechtigungen anfordern.
Audio aufnehmen
Nachdem der Nutzer die Berechtigung zum Aufzeichnen erteilt hat, können Sie Audio aufzeichnen und die Aufnahme verarbeiten.
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()
Audiofokus erwerben
Wenn Sie mit dem Mikrofon des Autos aufzeichnen, müssen Sie zuerst den Audiofokus erwerben. Dadurch wird die Wiedergabe aller laufenden Medien beendet. Wenn Sie den Audiofokus verlieren, beenden Sie die Aufnahme. So erwerben Sie beispielsweise den Audiofokus:
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