# Como vibrar, emitir beep e usar a área de transferência

> Feedback rápido do dispositivo — vibração, som de beep e copiar/colar do clipboard.

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

# Como vibrar, emitir beep e usar a área de transferência

**Propósito.** Dar feedback rápido ao usuário: **vibrar** o aparelho, tocar um **beep** e
**copiar/colar** texto na área de transferência.

## APIs usadas
- `Device.vibrate(int millis)` — vibra por `millis` ms. **No iOS a duração é ignorada** (não há como definir tempo nessa plataforma).
- `Device.beep()` — toca o som `beep.mp3` pré-carregado. **Não bloqueia** (agenda o play na render thread).
- `Device.clipboardCopy(String s)` — copia a string para a área de transferência.
- `Device.clipboardPaste()` → `String` — devolve a última string do clipboard, ou `""` se vazio.

> **Nota.** Todos são métodos **estáticos** de `Device`. São seguros para chamar de qualquer thread
> (`beep()` internamente agenda na render thread). `clipboardPaste()` nunca retorna `null` — retorna
> string vazia quando não há nada.

## Exemplo completo (copiar, colar e rodar)

```java
package com.exemplo;

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

/** Tela principal executável. Aponte o launcher (classname) e rode: 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 ->
      {
         // Feedback tátil e sonoro (métodos estáticos, seguros de qualquer thread)
         Device.vibrate(50);       // 50ms (ignorado no iOS)
         Device.beep();            // não bloqueia

         // Área de transferência
         Device.clipboardCopy("Texto para copiar");
         String colado = Device.clipboardPaste();   // "" se o clipboard estiver vazio

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

> O trecho abaixo mostra **só o miolo**. Para rodar, coloque-o no esqueleto `MainWindow` acima.

## Trecho mínimo

```java
// verificado na fonte: Device.java (vibrate linha 253, beep linha 306, clipboardCopy linha 271, clipboardPaste linha 279)
import dev.crossfly.device.*;              // Device

// Feedback tátil e sonoro
Device.vibrate(50);       // 50ms (ignorado no iOS)
Device.beep();            // não bloqueia

// Área de transferência
Device.clipboardCopy("Texto para copiar");
String colado = Device.clipboardPaste();   // "" se o clipboard estiver vazio
```

## Aprofunde-se
- Guia de som e diversos: [Som e diversos](/docs/data-and-services/device-sound-and-misc)
- Receita irmã: [tts-stt.md](/docs/cookbook/device/tts-stt)
