Android 13 以降では、クリップボードにコンテンツが追加されると、そのことをユーザーが視覚的に確認できるよう、標準のポップアップが表示されます。この新しい通知機能により、次のことが可能になります。
- コンテンツが正常にコピーされたことをユーザーに知らせる。
- コピーされたコンテンツのプレビューを表示する。
Android 12L(API レベル 32)以前では多くの場合、コンテンツをどの時点でコピーできたか、また何をコピーをしたかをユーザーが確認できませんでした。
この機能により、コピー後にアプリに表示されるさまざまな通知が標準化され、ユーザーがクリップボードを細かく制御できるようになります。


通知の重複を避ける
情報が重複して表示されないように、Android 13 以上のアプリ内コピーの後に表示されるポップアップ通知は、削除することを強くおすすめします。


例
Android 13 でコピー確認 UI が重複しないようにするには、この例のようなコードを使用します。
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
にブール型のエクストラを追加します。対象 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)
}
}