# 如何振动、发出蜂鸣声并使用剪贴板

> 快速的设备反馈——振动、蜂鸣声以及剪贴板的复制/粘贴。

Source: https://crossfly.dev/zh/docs/cookbook/device/vibrar-beep-clipboard — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# 如何振动、发出蜂鸣声并使用剪贴板

**目的。** 向用户提供快速反馈：让设备**振动**、播放一声**蜂鸣**并
在剪贴板中**复制/粘贴**文本。

## 使用的 API
- `Device.vibrate(int millis)` — 振动 `millis` 毫秒。**在 iOS 上时长会被忽略**（该平台无法设置时长）。
- `Device.beep()` — 播放预加载的 `beep.mp3` 声音。**不阻塞**（在 render thread 上调度播放）。
- `Device.clipboardCopy(String s)` — 把字符串复制到剪贴板。
- `Device.clipboardPaste()` → `String` — 返回剪贴板中最近的字符串，若为空则返回 `""`。

> **说明。** 它们都是 `Device` 的**静态**方法。可以安全地从任意线程调用
> （`beep()` 内部在 render thread 上调度）。`clipboardPaste()` 永远不会返回 `null`——
> 当没有任何内容时返回空字符串。

## 完整示例（复制、粘贴并运行）

```java
package com.exemplo;

import dev.crossfly.ui.*;                   // Window, Button, Label
import dev.crossfly.ui.layout.*;            // VerticalLayout
import dev.crossfly.device.*;               // Device

/** 可执行的主界面。将 launcher 指向此类（classname）并运行：gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label resultado = new Label("");
      add(LAY_AUTO, resultado);

      Button acao = new Button("Vibrar, beep e copiar");
      acao.onAction(c ->
      {
         // 触觉与声音反馈（静态方法，任意线程调用都安全）
         Device.vibrate(50);       // 50ms（iOS 上忽略）
         Device.beep();            // 不阻塞

         // 剪贴板
         Device.clipboardCopy("Texto para copiar");
         String colado = Device.clipboardPaste();   // 剪贴板为空时返回 ""

         resultado.setText("Clipboard: " + colado);
      });
      add(LAY_AUTO, acao);
   }
}
```

> 下面的片段仅展示**核心部分**。要运行它，请把它放入上面的 `MainWindow` 骨架中。

## 最小片段

```java
// 已在源码验证：Device.java (vibrate 第 253 行, beep 第 306 行, clipboardCopy 第 271 行, clipboardPaste 第 279 行)
import dev.crossfly.device.*;              // Device

// 触觉与声音反馈
Device.vibrate(50);       // 50ms（iOS 上忽略）
Device.beep();            // 不阻塞

// 剪贴板
Device.clipboardCopy("Texto para copiar");
String colado = Device.clipboardPaste();   // 剪贴板为空时返回 ""
```

## 深入了解
- 声音与杂项指南：[声音与杂项](/docs/data-and-services/device-sound-and-misc)
- 姊妹配方：[tts-stt.md](/docs/cookbook/device/tts-stt)
