Compose 中的剪贴板与分享:复制、粘贴和 Intent 分享指南

发布: (2026年3月2日 GMT+8 09:18)
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 进行 Intent 分享

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")
}

使用 Intent 分享图片

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")
}

接收共享内容

Manifest 声明

在 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

相关文章

阅读更多 »