MAUI 中实现剪贴板功能非常简单,官方已提供跨平台的
ClipboardAPI,支持读写文本内容,且无需额外权限(Android 12+ 需声明
android.permission.READ_CLIPBOARD才能读取,但写入始终可用)。
写入文本到剪贴板
使用
Clipboard.SetTextAsync()即可将字符串写入系统剪贴板: 调用前建议先检查是否可用:
Clipboard.IsSupported写入是异步操作,需用
await等待完成 失败时会抛出异常(如后台进程限制),建议加 try-catch 示例:
if (Clipboard.IsSupported)
{
try
{
await Clipboard.SetTextAsync("Hello from MAUI!");
}
catch (Exception ex)
{
// 处理写入失败,例如弹 Toast 或日志
}
}
从剪贴板读取文本
用
Clipboard.GetTextAsync()获取当前剪贴板中的纯文本内容: 仅返回文本(不支持图片、HTML 等富格式) 若剪贴板为空或不含文本,返回
null或空字符串 Android 12+ 及以上系统,需在
AndroidManifest.xml中添加权限才能读取: AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.READ_CLIPBOARD" />读取示例:
if (Clipboard.IsSupported)
{
try
{
string text = await Clipboard.GetTextAsync();
if (!string.IsNullOrWhiteSpace(text))
{
// 使用读取到的文本,比如显示在 Label 上
}
}
catch (Exception ex)
{
// 权限缺失或访问被拒时触发
}
}
监听剪贴板内容变化(有限支持)
MAUI 官方
Clipboard类**不提供原生的剪贴板变更事件**(如 Windows 的
Clipboard.ContentChanged)。目前只能通过轮询方式间接检测: 启动一个定时器(如
DispatcherTimer),每隔 1–2 秒调用
GetTextAsync()缓存上一次读取值,对比变化后触发逻辑 注意避免高频轮询影响性能或耗电,尤其在后台时应暂停 小提示:iOS 和 Android 均不开放系统级剪贴板监听权限,轮询是当前最可行的跨平台方案。
平台注意事项
不同平台行为略有差异,开发时需留意:
iOS:剪贴板内容在 App 进入后台后可能被清空(取决于系统策略),且无法读取其他 App 写入的内容(沙盒限制) Android:Android 12+ 强制要求READ_CLIPBOARD权限才能读取;低版本可直接读,但建议统一适配 Windows/macOS:完全支持读写,无额外权限要求
基本上就这些。MAUI 的 Clipboard API 覆盖主流场景,只要注意权限和空值判断,用起来很稳。
