剪贴板中的 null

null from Clipboard

我需要从剪贴板中获取复制的数据。我使用此代码:

val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
val clipData: ClipData? = clipboardManager.primaryClip
clipData?.let { textView.text = clipData.getItemAt(0).text }

如果我在 onCreate()onResume() 回调中使用此代码,我总是从剪贴板中获取 null。

但是如果我调用这段代码:

textView.post {
        val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
        val clipData: ClipData? = clipboardManager.primaryClip
        clipData?.let { textView.text = clipData.getItemAt(0).text }
}

我得到了复制的字符串。

所以,我得出结论,剪贴板会等到所有视图都呈现完。

为什么剪贴板需要等待渲染所有视图?或者剪贴板可能正在等待其他东西

发生这种情况是因为当您尝试从剪贴板获取 primaryClip 时,您的应用应该处于焦点位置。

所有视图都必须设置并绑定到 activity,这就是为什么您必须在 view.post { }

的帮助下将函数添加到 UI 队列

该更改是在 API 29 中添加的 https://developer.android.com/about/versions/10/privacy/changes#clipboard-data