剪贴板中为空

Ser*_*aka 6 clipboard android

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

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

如果我在内部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 }
}
Run Code Online (Sandbox Code Playgroud)

我得到复制的字符串。

因此,我得出结论,剪贴板会等待所有视图都渲染完毕。

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

小智 8

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

所有视图都必须设置并与活动相关联,这就是为什么您必须在以下帮助下将函数添加到 UI 队列view.post { }

该更改已添加到 API 29 https://developer.android.com/about/versions/10/privacy/changes#clipboard-data