Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

Jetpack Compose를 사용하여 채팅 앱에 음성 입력 기능 추가하기

Billcorea 2025. 1. 14. 15:18
반응형

Jetpack Compose를 사용하여 채팅 앱에 음성 입력 기능 추가하기

음성듣기 사용예제

 

안녕하세요, 여러분! 오늘은 Jetpack Compose를 사용하여 안드로이드 채팅 앱에 음성 입력 기능을 추가하는 방법에 대해 알아보겠습니다. 음성 입력 기능은 사용자가 텍스트를 입력하는 대신 음성을 통해 메시지를 입력할 수 있도록 도와줍니다.

1. 프로젝트 설정

우선, 프로젝트의 build.gradle 파일에 필요한 의존성을 추가합니다:

Gradle
dependencies {
    implementation "androidx.core:core-ktx:1.7.0"
    implementation "androidx.compose.ui:ui:1.0.5"
    implementation "androidx.compose.material:material:1.0.5"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0"
    implementation "androidx.activity:activity-compose:1.4.0"
}

2. 음성 입력 컴포넌트 구현

이제 SpeechRecognizer를 사용하여 음성 입력을 처리하고, 이를 Jetpack Compose UI와 연동해보겠습니다.

Kotlin
 
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.speech.RecognizerIntent
import android.speech.SpeechRecognizer
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.core.app.ActivityCompat
import com.example.myapplication.ui.theme.MyApplicationTheme
import java.util.*

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApplicationTheme {
                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
                    ChatScreen()
                }
            }
        }
    }
}

@Composable
fun ChatScreen() {
    var message by remember { mutableStateOf("") }
    val context = LocalContext.current as Activity

    // Request microphone permission
    val requestPermissionLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.RequestPermission(),
        onResult = { isGranted: Boolean ->
            if (isGranted) {
                // Permission granted
            } else {
                // Permission denied
            }
        }
    )

    LaunchedEffect(Unit) {
        requestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
    }

    val speechRecognizer = remember { SpeechRecognizer.createSpeechRecognizer(context) }
    val recognizerIntent = remember {
        Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
            putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
            putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault())
        }
    }

    val speechResultLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val matches = result.data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
            matches?.let {
                message = it[0]
            }
        }
    }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        TextField(
            value = message,
            onValueChange = { message = it },
            modifier = Modifier.fillMaxWidth(),
            placeholder = { Text("Enter your message") }
        )
        Spacer(modifier = Modifier.height(16.dp))
        Button(onClick = {
            speechResultLauncher.launch(recognizerIntent)
        }) {
            Text("Start Voice Input")
        }
    }
}

3. 매니페스트 파일 수정

음성 입력을 사용하려면 매니페스트 파일에 RECORD_AUDIO 권한을 추가해야 합니다:

XML
 
<uses-permission android:name="android.permission.RECORD_AUDIO"/>

결론

이제 Jetpack Compose를 사용하여 채팅 앱에 음성 입력 기능을 성공적으로 추가할 수 있습니다. 음성 인식을 통해 더 편리한 채팅 경험을 제공할 수 있게 되었습니다. 필요에 따라 음성 인식 결과를 처리하는 추가적인 로직을 구현하여 사용자의 음성 입력을 더 정교하게 처리할 수 있습니다.

반응형