Compose에서 클립보드 및 공유: 복사, 붙여넣기 및 인텐트 공유 가이드

발행: (2026년 3월 2일 오전 10:18 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

LocalClipboardManager: 복사 및 붙여넣기

val clipboardManager = LocalClipboardManager.current

// Copy text to clipboard
Button(onClick = {
    clipboardManager.setText(AnnotatedString("Hello, Android!"))
}) {
    Text("Copy to Clipboard")
}

// Read from clipboard
val pastedText = remember { mutableStateOf("") }
Button(onClick = {
    pastedText.value = clipboardManager.getText()?.text ?: ""
}) {
    Text("Paste from Clipboard")
}

Snackbar를 사용한 사용자 피드백 제공

val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()

Column {
    Button(onClick = {
        clipboardManager.setText(AnnotatedString("Copied!"))
        scope.launch {
            snackbarHostState.showSnackbar("Text copied to clipboard")
        }
    }) {
        Text("Copy")
    }

    SnackbarHost(hostState = snackbarHostState)
}

createChooser를 사용한 인텐트 공유

val context = LocalContext.current

Button(onClick = {
    val sendIntent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_TEXT, "Check out this app!")
        putExtra(Intent.EXTRA_SUBJECT, "Amazing App")
        type = "text/plain"
    }
    val chooserIntent = Intent.createChooser(sendIntent, "Share via")
    context.startActivity(chooserIntent)
}) {
    Text("Share Text")
}

인텐트를 사용한 이미지 공유

val context = LocalContext.current

Button(onClick = {
    val imageUri = Uri.parse("content://com.example.app/images/sample.jpg")
    val shareIntent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_STREAM, imageUri)
        type = "image/*"
    }
    val chooser = Intent.createChooser(shareIntent, "Share Image")
    context.startActivity(chooser)
}) {
    Text("Share Image")
}

공유된 콘텐츠 수신

매니페스트 선언

Compose에서 수신된 콘텐츠 처리

val intent = LocalContext.current.currentActivity?.intent
val sharedText = intent?.getStringExtra(Intent.EXTRA_TEXT) ?: ""
val sharedUri = intent?.getParcelableExtra(Intent.EXTRA_STREAM)

Text("Received: $sharedText")

모범 사례

  • 클립보드 작업 후 항상 시각적 피드백(Snackbar, Toast)을 제공하세요.
  • createChooser()를 사용해 사용자가 선호하는 공유 앱을 선택하도록 하세요.
  • 클립보드 데이터가 없을 경우 부드럽게 처리하세요.
  • 공유 파일에 접근하기 위해 적절한 권한을 요청하세요.
  • 여러 공유 앱(WhatsApp, Telegram, Email 등)으로 테스트하세요.

더 많은 Android 개발 패턴을 살펴보세요: 8 Android 앱 템플릿 →

0 조회
Back to Blog

관련 글

더 보기 »