# Sonido y utilidades de dispositivo

> El resto de la fachada Device — beep, vibrate, clipboard, radios inalámbricas, TTS/STT, plataforma.

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

# Sonido y utilidades de dispositivo

La fachada **`Device`** reúne recursos pequeños y portables. Todo estático.

## Feedback y sistema
```java
Device.beep();              // bip del sistema
Device.vibrate(200);        // vibra 200 ms
Device.sleep(500);          // pausa el hilo actual 500 ms
int livre = Device.getFreeMemory();
Device.show("https://exemplo.com");   // abre URL/recurso en la app externa del SO
```

## Portapapeles
```java
Device.clipboardCopy("texto");
String colado = Device.clipboardPaste();
```

## Identidad y 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;            // directorio base de la app
```
`Platform`: `JAVA` · `WINDOWS` · `LINUX` · `IPHONE` · `ANDROID` · `IPAD` · `MACOS`.

## Radios inalámbricas
```java
WirelessState wifi = Device.getWirelessState(WirelessType.WIFI);   // UNSUPPORTED/DISABLED/ENABLED
Device.enableWireless(WirelessType.BLUETOOTH, true);
```
`WirelessType`: `WIFI` · `PHONE` · `BLUETOOTH`.

## Voz — TTS y STT
```java
Device.textToVoice("Olá, mundo");   // dice el texto (TTS)

Device.voiceToText(new Device.VoiceToTextListener() {   // reconocimiento de voz (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)); }
});
```
> Los callbacks de STT llegan **fuera de la paint thread** → regrese con `Component.onUI(...)`.

## ⚠️ Notas de migración
- `Sound.*` y `RadioState` **fueron absorbidos por `Device`** — `Sound.tone`/`play` **ya no existen**.
- En **Web/TeaVM**, buena parte de esto es *stub* (vibración, radios, voz) — trate el destino Web.

## Buenas prácticas
- Los callbacks de voz/radio regresan a la UI con `onUI(...)`.
- Verifique `WirelessState.UNSUPPORTED` antes de asumir que un radio existe.

## Errores comunes
- Llamar a `Sound.play(...)`/`RadioState` (eliminados) — use `Device`.
- Tocar la UI directamente en el `onResult` del STT sin `onUI`.

## Vea también
- [Biometría](/docs/data-and-services/device-biometry) · [Trabajo en background](/docs/data-and-services/background-work)
