From d960127007c72a179657093b92d9c34fd19ae863 Mon Sep 17 00:00:00 2001 From: Tram Bui Date: Thu, 30 Apr 2026 15:11:21 -0700 Subject: [PATCH 1/2] swap out AudioRecord with MediaRecorder implementation for projected context --- .../example/xr/projected/ProjectedHardware.kt | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt b/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt index fd20c8186..7848cef04 100644 --- a/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt +++ b/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt @@ -39,9 +39,9 @@ import androidx.camera.core.resolutionselector.ResolutionSelector import androidx.camera.core.resolutionselector.ResolutionStrategy import androidx.camera.lifecycle.ProcessCameraProvider import androidx.core.content.ContextCompat -import androidx.core.content.ContextCompat.getSystemService import androidx.xr.projected.ProjectedContext import androidx.xr.projected.experimental.ExperimentalProjectedApi +import java.io.File private const val TAG = "ProjectedHardware" @@ -199,13 +199,12 @@ private fun startBluetoothAudioRecording(context: Context) { audioRecord.release() } } - /** * Demonstrates how to record audio using the projected device context. */ @RequiresPermission(Manifest.permission.RECORD_AUDIO) @OptIn(ExperimentalProjectedApi::class) -private fun startProjectedAudioRecording(context: Context) { +private fun startProjectedAudioRecording(context: Context, outputFile: File) { val projectedDeviceContext = try { ProjectedContext.createProjectedDeviceContext(context) } catch (e: IllegalStateException) { @@ -214,19 +213,18 @@ private fun startProjectedAudioRecording(context: Context) { } // [START androidxr_projected_context_audio_record] - // Initialize AudioRecord with projected device context - val audioRecord = AudioRecord.Builder() - .setAudioSource(MediaRecorder.AudioSource.CAMCORDER) - .setAudioFormat(audioFormat) - .setBufferSizeInBytes(bufferSize) - // pass in the projected device context - .setContext(projectedDeviceContext) - .build() - - audioRecord.startRecording() - // [END androidxr_projected_context_audio_record] - - // Stop and release when done. - audioRecord.stop() - audioRecord.release() + // Initialize MediaRecorder with the projected device context + val recorder = MediaRecorder(projectedDeviceContext).apply { + setAudioSource(MediaRecorder.AudioSource.CAMCORDER) + setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) + setAudioEncoder(MediaRecorder.AudioEncoder.AAC) + setAudioChannels(1) + setAudioSamplingRate(16000) + setAudioEncodingBitRate(32000) + setOutputFile(outputFile) + + prepare() + start() + // [END androidxr_projected_context_audio_record] + } } From aa2cddf683fb0508309ae9df2860f996be7c67eb Mon Sep 17 00:00:00 2001 From: Tram Bui Date: Thu, 30 Apr 2026 15:40:31 -0700 Subject: [PATCH 2/2] adddress gemini feedback --- .../main/java/com/example/xr/projected/ProjectedHardware.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt b/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt index 7848cef04..35bcb4457 100644 --- a/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt +++ b/xr/src/main/java/com/example/xr/projected/ProjectedHardware.kt @@ -227,4 +227,8 @@ private fun startProjectedAudioRecording(context: Context, outputFile: File) { start() // [END androidxr_projected_context_audio_record] } + + // Stop and release when done. + recorder.stop() + recorder.release() }