Android clipboard.getText() 已弃用;那么如何获取其中的文本项?

Android clipboard.getText() is deprecated; how then to get the text item that's in it?

这很好用,向我准确显示了放入 Android 剪贴板的最后一个字符串是什么,恰好是 euswcnmst.

Log.w("clip", clipboard.getText().toString());

但是 getText 已弃用 clipboard 个对象。

与此同时,如果我这样做 Log.w("clip", clipboard.getPrimaryClip().toString());,我就会得到这个,如图所示 ClipData { text/plain "label" {T:euswcnmst} }

我明白了,假设这种格式总是用于字符串剪贴板项目,我可以使用 String 函数(找到 : 和随后的 } 并执行 substring) 来提取 euswcnmst,但这是一个技巧。

我应该怎么做?

编辑

根据 Commonsware 的回答,这里是我应该做的事情:

ClipData clip = clipboard.getPrimaryClip();

if(clip == null || clip.getItemCount() == 0)
  return; // ... whatever; just don't go to next line

String t = clip.getItemAt(0).getText().toString();

编辑 2

如果剪贴板中的最后一个项目不是文本,上面的代码会给出这个错误:

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference

修复方法如下(我在下面添加了第三行):

if(   clip == null 
   || clip.getItemCount() == 0 
   || clip.getItemCount() > 0 && clip.getItemAt(0).getText() == null
  )
    return; // ... whatever; just don't go to next line

请理解剪贴板并非纯粹用于文本。复杂的构造可以放在剪贴板上,形式为 ClipData 对象内的 1 到 N ClipData.Item 个对象,您从 getPrimaryClip().

获得

根据您的 ClipData,调用 getItemCount() 来确定项目数。对于您想尝试使用的任何项目,请在 ClipData 上调用 getItemAt() 以获取相应的 ClipData.Item。在该项目上,您可以调用 getText()coerceToText() 来尝试获取该项目的文本表示。

使用下面的代码

String copyString = clipboard.getPrimaryClip().getItemAt(0).getText()