从 Android 13 开始,将内容添加到剪贴板时,系统会显示标准视觉确认界面。新确认界面会执行以下操作:
- 确认内容已成功复制。
- 提供所复制内容的预览。
在 Android 12L(API 级别 32)及更低版本中,用户经常不确定他们是否成功复制了内容或者复制了什么内容。
此功能可将应用在用户复制内容后显示的各种通知标准化,并让用户可以更好地控制剪贴板。


避免显示重复的通知
为避免重复显示信息,对于 Android 13 及更高版本,我们强烈建议您移除在应用内复制后显示的任何弹出式通知。


示例
为避免在 Android 13 中显示重复的复制确认界面,请尝试使用如下代码:
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()
}
请注意,对于 Android 13 及更高版本,将文本复制到剪贴板后,您无需添加弹出式消息。
将敏感内容添加到剪贴板
如果您的应用允许用户将敏感内容(例如密码或信用卡信息)复制到剪贴板,则必须在调用 ClipboardManager#setPrimaryClip()
之前向 ClipData 的 ClipDescription
添加一个标志。添加此标志可阻止敏感内容出现在内容预览中。


如需标记敏感内容,请向 ClipDescription
添加一个布尔型 extra。无论应用的目标 API 级别如何,所有应用都应这么做。
// 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)
}
}