不推荐使用Android Clipboard.getText();然后如何获取其中的文本项?

效果很好,向我确切地显示了放入Android剪贴板的最后一个字符串是euswcnmst.

Log.w(“ clip”,剪贴板.getText().toString());

但是不赞成将getText用于剪贴板对象.

同时,如果我执行Log.w(“ clip”,剪贴板.getPrimaryClip().toString());,则得到的结果与显示的完全一样
ClipData {文本/纯文本“标签” {T:euswcnmst}}

我看到了我想要的,并且假设此格式始终用于字符串剪贴板项目,我可以使用String函数(find:和后续的}并执行子字符串)来提取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

如果剪贴板中的最后一个ITEM不是文本,则上面的代码将给出此错误:

java.lang.NullPointerException:尝试在空对象引用上调用接口方法’java.lang.String java.lang.CharSequence.toString()’

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

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

解决方法:

请理解剪贴板不仅仅用于文本.复杂的构造可以以1到N个从getPrimaryClip()获取的ClipData对象中的ClipData.Item对象的形式放置在剪贴板上.

给定您的ClipData,调用getItemCount()确定项目数.对于您希望尝试使用的任何项目,请在ClipData上调用getItemAt()以获取相应的ClipData.Item.在该项目上,您可以调用getText()或coerceToText()尝试获取该项目的文本表示形式.

上一篇:剪贴板更新事件被多次触发


下一篇:js 实现页面点击按钮复制内容