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

DSl*_*r64 6 clipboard android

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

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

getText不推荐用于clipboard对象。

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

我知道我想要什么,并且假设这种格式总是用于字符串剪贴板项目,我可以使用String函数( find:和后续}和 do 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();
Run Code Online (Sandbox Code Playgroud)

编辑 2

如果剪贴板中的最后一个 ITEM 不是文本,则上面的代码会出现以下错误:

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
Run Code Online (Sandbox Code Playgroud)

Com*_*are 7

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

给定您的ClipData, 调用getItemCount()以确定项目数。对于任何一个项目(S)你想尝试使用,通话getItemAt()ClipData得到相应的ClipData.Item。在该项目上,您可以调用getText()coerceToText()尝试获取该项目的文本表示。


Dhr*_*tel 5

使用下面的代码

String copyString = clipboard.getPrimaryClip().getItemAt(0).getText()
Run Code Online (Sandbox Code Playgroud)