gpt4 book ai didi

android - 在 Android 中多次调用 onPrimaryClipchanged()

转载 作者:行者123 更新时间:2023-12-03 14:50:57 26 4
gpt4 key购买 nike

我已经实现了后台服务来收听系统范围内的剪贴板事件..

服务实现:

public class ClipService extends Service {
ClipboardManager cm;

@Override
public void onCreate() {
Log.d("FRAG","onCreate called...");
super.onCreate();
cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
cm.addPrimaryClipChangedListener(new ClipboardListener());
}

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onDestroy() {
super.onDestroy();
cm.removePrimaryClipChangedListener(new ClipboardListener());
}

class ClipboardListener implements ClipboardManager.OnPrimaryClipChangedListener{

@Override
public void onPrimaryClipChanged() {
Log.d("FRAG","onPrimaryClipChanged called..");
if(cm!=null) {
String s1 = cm.getPrimaryClip().getItemAt(0).coerceToText(ClipService.this).toString();
ContentValues cv = new ContentValues();
cv.put(DatabaseHelper.CONTENT,s1);
getContentResolver().insert(DataProvider.CONTENT_URI, cv);//Insert using Content provider
}
}
}
}

现在我担心的是,对于复制到剪贴板的每个文本,都会为单个复制事件插入三个条目......即onPrimaryClipChanged 被调用了 3 次..

我正在使用 `Log.d("FRAG","onPrimaryClipChanged called..");并且它被记录了 3 次,所以问题似乎在于每个剪贴板更改事件调用函数 3 次,而不是插入部分代码。

它被调用 3 次的原因可能是什么?

最佳答案

这是 WebView/Chrome 的一个已知问题。我通过忽略某个阈值(例如 50 毫秒)内的重复事件来解决它

ClipboardManager.OnPrimaryClipChangedListener primaryClipChangedListener = new ClipboardManager.OnPrimaryClipChangedListener() {
private static final long THRESHOLD_MS = 50;
private long lastChangedTime = 0;
private String lastString = "";
@Override
public void onPrimaryClipChanged() {
try {
String str = clipMan.getText().toString();

// Copying text from certain places will trigger multiple events (e.g. Chrome/WebView generates 3 events)
// Ignore the duplicated events
if (System.currentTimeMillis() - lastChangedTime < THRESHOLD_MS && Objects.equals(lastString, str)) {
return;
}

lastChangedTime = System.currentTimeMillis();
lastString = str;

// Rest of the logic
...
}
}
}

关于android - 在 Android 中多次调用 onPrimaryClipchanged(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486370/

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