Cómo copiar y pegar

A partir de Android 13, el sistema muestra una confirmación visual estándar cuando se agrega contenido al portapapeles. La nueva confirmación hace lo siguiente:

  • Confirma que el contenido se copió de forma correcta.
  • Proporciona una vista previa del contenido copiado.

En Android 12L (nivel de API 32) y versiones anteriores, los usuarios suelen no saber con seguridad cuándo copiaron contenido de forma correcta o el contenido que copiaron.

Esta función estandariza las varias notificaciones que muestran las apps después de copiar y les ofrece a los usuarios más control sobre su portapapeles.

Widget de copiar y pegar
Figura 1: Se muestra la nueva IU cuando el contenido entra al portapapeles.
Anatomía del widget de copiar y pegar: vista previa, compartir y enviar a varios dispositivos
Figura 2: Anatomía del widget de copiar y pegar: vista previa, compartir y enviar a varios dispositivos.

Evita notificaciones duplicadas

A fin de evitar que se muestre información duplicada, te recomendamos que quites las notificaciones emergentes que se muestran después de una copia en la app para Android 13 y versiones posteriores.

Se muestra una barra de notificaciones después de una copia en la app.
Figura 3: Si muestras una barra de notificaciones de confirmación de la copia en Android 13, el usuario ve mensajes duplicados.
Se muestra un aviso después de una copia en la app.
Figura 4: Si muestras un aviso de confirmación de la copia en Android 13, el usuario ve mensajes duplicados.

Ejemplo

Para evitar que se muestre una IU de confirmación duplicada de la copia en Android 13, usa un código como el siguiente:


  fun textCopyThenPost(textCopied:String) {
    val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
    // When setting the clip board text.
    clipboardManager.setPrimaryClip(ClipData.newPlainText("", textCopied))
    // Only show a toast for Android 12 and lower.
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2)
      Toast.makeText(context, “Copied”, Toast.LENGTH_SHORT).show()
  }

Observa que no necesitas incluir un mensaje emergente después de copiar el texto en el portapapeles para Android 13 y versiones posteriores.

Agrega contenido sensible al portapapeles

Si tu app permite que los usuarios copien contenido sensible, como contraseñas o información de tarjetas de crédito, en el portapapeles, debes agregar una marca a ClipDescription de ClipData antes de llamar a ClipboardManager#setPrimaryClip(). Agregar esta marca evita que aparezca contenido sensible en la vista previa del contenido.

Vista previa del texto copiado sin marcas en el contenido sensible
Figura 5: Vista previa del texto copiado sin marcar contenido sensible.
Vista previa del texto copiado con marcas en el contenido sensible.
Figura 6: Vista previa del texto copiado con marcas en el contenido sensible.

Para marcar contenido sensible, agrega un valor booleano adicional a ClipDescription. Todas las apps deben hacerlo, independientemente del nivel de API objetivo.


// When your app targets API level 33 or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app targets a lower API level
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}