التسجيل من ميكروفون السيارة

يمكنك استخدام واجهة برمجة التطبيقات CarAppService وCarAudioRecord في سيارتك لمنح تطبيقك إذن الوصول إلى ميكروفون السيارة الخاص بالمستخدم. على المستخدمين منح تطبيقك إذن الوصول إلى ميكروفون السيارة. يمكن لتطبيقك تسجيل بيانات أدخلها المستخدم ومعالجتها في تطبيقك.

تضمين إذن التسجيل في بيان الأذونات

قبل تسجيل أي صوت، يجب أولاً تضمين إذن التسجيل في ملف 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