在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