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.


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.


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.


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)
}
}