gpt4 book ai didi

android - 多次调用 OnPrimaryClipChangedListener

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:37 31 4
gpt4 key购买 nike

在 Android 中,当我从 Chrome、Gmail 和收件箱复制文本时,我的 onPrimaryClipChangedlistener 方法被调用了 3 次,而当我在另一个应用程序(如 WhatsApp 中复制一些文本或按预期保留此方法时,仅被调用一次。

示例:在 Chrome 中复制一些文本将导致以下输出:

result: null

result: text

result: text

奇怪的事情是,当从链接或页面的 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;
}
}

最佳答案

根据@septemberboy7 的评论建议

I have done something to work. remove primary clip listener and re add again after 500ms by using Handler.

下面的代码缓解了这个问题:

void startPrimaryClipChangedListenerDelayThread() {
mClipboardManager.removePrimaryClipChangedListener(mListener);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mClipboardManager.addPrimaryClipChangedListener(mListener);
}
}, 500);
}

在OnPrimaryClipChangedListener内部的onPrimaryClipChanged()回调中立即调用此方法,防止0.5s回调再次触发。不理想,但目前有效。

关于android - 多次调用 OnPrimaryClipChangedListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154670/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com