如何避免复制侦听器对Android中的粘贴做出反应?

问题描述

用户将某些内容复制到剪贴板时,我想在我的应用程序中运行Toast消息。这就是为什么我在活动中实现了这样的侦听器的原因:

class MainActivity : AppCompatActivity() {
    var mPrimarychangelistener = OnPrimaryClipChangedListener {
    Toast.makeText(applicationContext,"You have copied something!",LENGTH_SHORT).show()
}
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...
        val clipboard = this.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
        clipboard.addPrimaryClipChangedListener(mPrimarychangelistener)
    }

// ...
}

问题在于,当从剪贴板粘贴某些文本时,Toast也会显示,我希望仅当用户复制文本时才会发生。我该如何解决

解决方法

我在一个仿真器上尝试了您的示例,该示例可以正常工作。
该文档说以下内容:

当主剪辑更改时,由ClipboardManager调用的回调。

如果这在您的测试设备上不起作用,您可以尝试在触发回调后保存剪贴板字符串,然后下次将其与剪贴板进行比较。 如果两个字符串相同,则意味着用户要么粘贴剪贴板中的文本,要么只是再次复制了相同的文本。
然后,如果两个字符串不同,就可以显示吐司。