无法在java android中获取剪贴板数据

Posted

技术标签:

【中文标题】无法在java android中获取剪贴板数据【英文标题】:Unable to get the clipboard data in java android 【发布时间】:2021-12-12 12:56:51 【问题描述】:

我正在使用 java 中的一个 android 项目,我需要在活动中复制粘贴一些数据,但这里的问题是我能够设置主剪辑,但是当我尝试访问 primaryClip 时它返回 false。我使用以下代码设置主剪辑,

ClipboardManager clipboard = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData clip = ClipData.newPlainText("textData","12345");
                clipboard.setPrimaryClip(clip);

我正在尝试这样访问

 ClipboardManager clipboard = (ClipboardManager) getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
    if (clipboard.hasPrimaryClip()) 
        //This returning false
    

这里 hasPrimaryClip() 返回 false,但是如果我打开任何文本编辑器应用程序并尝试粘贴它们,它将粘贴我设置为主要剪辑的数据。

如何解决这个错误?

【问题讨论】:

【参考方案1】:

尝试在剪辑数据 100 毫秒后调用 clipboard.hasPrimaryClip() 应该可以工作。

    val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clip = ClipData.newPlainText("label", "whatever")
    clipboard.setPrimaryClip(clip)
    Log.d(TAG, clipboard.primaryClip?.getItemAt(0).toString())

给出 null 但是:

    val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clip = ClipData.newPlainText("label", "whatever")
    clipboard.setPrimaryClip(clip)
    Handler().postDelayed(
        Log.d(TAG, clipboard.primaryClip?.getItemAt(0).toString())
    ,100)

打印“随便”。

【讨论】:

感谢您的回答,这解决了我的问题【参考方案2】:

正如官方文档所说,如果应用程序不是默认 IME,则返回 false。 https://developer.android.com/reference/android/content/ClipboardManager#hasPrimaryClip()

【讨论】:

以上是关于无法在java android中获取剪贴板数据的主要内容,如果未能解决你的问题,请参考以下文章

Android——ClipBoard(复制和粘贴)

Android——ClipBoard(复制和粘贴)

Android util - 获取剪贴板内容

机器太慢,导致获取系统剪贴板数据超时

java Android剪贴板操作

Android 实现剪贴板功能