在Android中,当我从Chrome,Gmail和Inbox复制文本时,我的onPrimaryClipChangedlistener方法被调用3次,而当我像WhatsApp一样复制另一个应用中的某些文本时,或者如预期的那样保留此方法,时间。OnPrimaryClipChangedListener多次调用
实施例:在镀铬复制一些文本将导致下面的输出:
结果:空
结果:文本
结果:文本
怪怪的事情是当从链接或页面的URL复制一些文本的方法被调用一次!所以这只发生在我从网站的“正文”复制文本时。
有没有一种优雅的“官方”方式来解决这个问题?我在这里阅读了几个有关这个主题的答案,在stackoverflow中,但似乎没有任何解决我的问题。
正如我所说,这个问题似乎只影响某些应用程序,所以这意味着从其他应用程序的问题?
这里我的代码
ClipboardManager mClipboard;
static boolean bHasClipChangedListener = false;
ClipboardManager.OnPrimaryClipChangedListener mPrimaryChangeListener = new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
updateClipData();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
registerPrimaryClipChanged();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterPrimaryClipChanged();
}
void updateClipData() {
ClipData clip = mClipboard.getPrimaryClip();
ClipData.Item item = clip.getItemAt(0);
Log.d(LogUtils.BASIC_LOG, "result: " + item.getText());
}
private void registerPrimaryClipChanged(){
if(!bHasClipChangedListener){
mClipboard.addPrimaryClipChangedListener(mPrimaryChangeListener);
bHasClipChangedListener = true;
}
}
private void unregisterPrimaryClipChanged(){
if(bHasClipChangedListener){
mClipboard.removePrimaryClipChangedListener(mPrimaryChangeListener);
bHasClipChangedListener = false;
}
}
你找到答案了吗?我也有这个问题 – myatmins
@ septemberboy7简答:没有。 – iroyo
我已经做了一些工作。删除主剪辑侦听器,并使用Handler在500ms后重新添加。 – myatmins