sách gpt4 ai đã đi

android - 多次调用 OnPrimaryClipChangedListener

In lại 作者:太空宇宙 更新时间:2023-11-03 10:18:37 37 4
mua khóa gpt4 Nike

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

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

result: vô giá trị

result: chữ

result: chữ

奇怪的事情是,当从链接或页面的 URL 复制一些文本时,该方法只被调用一次!所以只有当我从网站的“正文”复制文本时才会发生这种情况。

是否有一种优雅且“官方”的方式来解决这个问题?我已经在 stackoverflow 中阅读了关于这个主题的几个答案,但似乎没有什么能解决我的问题。

正如我所说,这个问题似乎只影响某些应用程序,那么这是否意味着其他应用程序出现了问题?

这是我的代码

ClipboardManager mClipboard;
static boolean bHasClipChangedListener = false;

ClipboardManager.OnPrimaryClipChangedListener mPrimaryChangeListener = new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
updateClipData();
}
};

@Ghi đè
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
registerPrimaryClipChanged();
}

@Ghi đè
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;
}
}

1 Câu trả lời

根据@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() {
@Ghi đè
công khai void run() {
mClipboardManager.addPrimaryClipChangedListener(mListener);
}
}, 500);
}

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

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

37 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com