# Som e utilidades de dispositivo

> O resto da fachada Device — beep, vibrate, clipboard, rádios sem fio, TTS/STT, plataforma.

Source: https://crossfly.dev/pt/docs/data-and-services/device-sound-and-misc — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Som e utilidades de dispositivo

A fachada **`Device`** reúne recursos pequenos e portáveis. Tudo estático.

## Feedback e sistema
```java
Device.beep();              // bip do sistema
Device.vibrate(200);        // vibra 200 ms
Device.sleep(500);          // pausa a thread atual 500 ms
int livre = Device.getFreeMemory();
Device.show("https://exemplo.com");   // abre URL/recurso no app externo do SO
```

## Área de transferência
```java
Device.clipboardCopy("texto");
String colado = Device.clipboardPaste();
```

## Identidade e plataforma
```java
if (Device.platform.isMobile()) { ... }     // ANDROID/IPHONE/IPAD
if (Device.platform.isDesktop()) { ... }    // WINDOWS/LINUX/MACOS
if (Device.platform.isIOS()) { ... }        // IPHONE/IPAD
String base = Device.homeFolder;            // diretório base da app
```
`Platform`: `JAVA` · `WINDOWS` · `LINUX` · `IPHONE` · `ANDROID` · `IPAD` · `MACOS`.

## Rádios sem fio
```java
WirelessState wifi = Device.getWirelessState(WirelessType.WIFI);   // UNSUPPORTED/DISABLED/ENABLED
Device.enableWireless(WirelessType.BLUETOOTH, true);
```
`WirelessType`: `WIFI` · `PHONE` · `BLUETOOTH`.

## Voz — TTS e STT
```java
Device.textToVoice("Olá, mundo");   // fala o texto (TTS)

Device.voiceToText(new Device.VoiceToTextListener() {   // reconhecimento de fala (STT)
   public void onStart() {}
   public void onFinish() {}
   public void onResult(String texto) { Component.onUI(() -> campo.text(texto)); }
   public void onError(int code, String msg) { Component.onUI(() -> Hint.show(msg, 2000)); }
});
```
> Os callbacks de STT chegam **fora da paint thread** → volte com `Component.onUI(...)`.

## ⚠️ Notas de migração
- `Sound.*` e `RadioState` **foram absorvidos por `Device`** — `Sound.tone`/`play` **não existem mais**.
- No **Web/TeaVM**, boa parte disto é *stub* (vibração, rádios, voz) — trate o alvo Web.

## Boas práticas
- Callbacks de voz/rádio voltam à UI com `onUI(...)`.
- Cheque `WirelessState.UNSUPPORTED` antes de assumir que um rádio existe.

## Erros comuns
- Chamar `Sound.play(...)`/`RadioState` (removidos) — use `Device`.
- Tocar a UI direto no `onResult` do STT sem `onUI`.

## Veja também
- [Biometria](/docs/data-and-services/device-biometry) · [Trabalho em background](/docs/data-and-services/background-work)
