场景:我正在尝试从浏览器中复制所选文本。
我正在使用服务来监控任何类型的复制事件。
ClipboardManager clipBoard;
CharSequence pasteData = "";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
clipBoard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener( new ClipboardListener() );
return Service.START_STICKY;
}
if ((clipBoard.getPrimaryClipDescription().hasMimeType("text/plain"))) {
//since the clipboard contains plain text.
ClipData.Item item = clipBoard.getPrimaryClip().getItemAt(0);
// Gets the clipboard as text.
pasteData = item.getText();
Toast.makeText(PasteItService.this,
pasteData,
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(PasteItService.this,
"Empty",
Toast.LENGTH_LONG).show();
}
}
以上代码适用于其他应用程序,如Whatsapp,徒步,但当我尝试复制任何选定的文本或在Chrome或默认浏览器等任何浏览器中使用直接复制链接文本选项时,上述代码都会出现故障。有时它成功地显示了我选择的实际文本的吐司,但有时候其他部分首先被触发。有时代码根本不起作用。我也尝试过调试,并获得与吐司相同的结果。
非常感谢任何帮助
答案 0 :(得分:1)
剪贴板中的数据并不总是来自浏览器的文本。你假设它是。不要这样做。它也可以是一个意图或一个uri,你需要能够处理它们。请阅读http://developer.android.com/reference/android/content/ClipData.html