4

Android では、Chrome、Gmail、および Inbox からテキストをコピーすると、onPrimaryClipChangedlistener メソッドが 3 回呼び出されますが、Wh​​atsApp や Keep などの別のアプリでテキストをコピーすると、予想どおり、このメソッドは 1 回だけ呼び出されます。

例: Chrome でテキストをコピーすると、次の出力が得られます。

結果:ヌル

結果:テキスト

結果:テキスト

奇妙なことは、リンクまたはページの URL からテキストをコピーするときに、メソッドが 1 回だけ呼び出されることです。したがって、これは、Web サイトの「本文」からテキストをコピーした場合にのみ発生します。

これを解決するエレガントで「公式」な方法はありますか? ここの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;
    }
}
4

1 に答える 1