这工作得很好,准确地告诉我最后一个字符串是什么,放进了android剪贴板,它恰好是euswcnmst
。Log.w("clip", clipboard.getText().toString());
但是getText
对于clipboard
对象是不推荐使用的。
同时,如果我这样做,我得到这个,正如所示Log.w("clip", clipboard.getPrimaryClip().toString());
我知道我想要什么,假设这个格式总是用于字符串剪贴板项,我可以使用ClipData { text/plain "label" {T:euswcnmst} }
函数(findString
和后续的:
和do}
)来提取substring
,但这是一个技巧。
我该怎么办?
编辑
根据Commonware的回答,我应该做以下几点:
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
如果剪贴板中的最后一个项目不是文本,则上述代码将给出此错误:
euswcnmst
这是修复方法(我在下面添加了第三行):
if( clip == null
|| clip.getItemCount() == 0
|| clip.getItemCount() > 0 && clip.getItemAt(0).getText() == null
)
return; // ... whatever; just don't go to next line
最佳答案
请理解剪贴板并非纯用于文本。复杂结构可以以1到nClipData.Item
对象的形式放在剪贴板上,这些对象位于从ClipData
获取的getPrimaryClip()
对象中。
鉴于您的ClipData
,请致电getItemCount()
以确定项目数。对于要尝试使用的任何项,请在getItemAt()
上调用ClipData
,以获取相应的ClipData.Item
。在该项上,可以调用getText()
或coerceToText()
来尝试获取该项的文本表示形式。