我需要从剪贴板获取复制的数据。我使用这段代码:
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