Android 10 中的剪贴板未按预期工作

问题描述

我已经实现了剪贴板功能的副本。因此,每当用户复制某些内容并且我的应用程序在此之后恢复时,我都会显示一个 Snackbar 来执行某些操作。它在 Android 9 中运行良好,但在 Android 10 中,根据策略更改,它不会观察背景中的剪贴板更改。没关系,但是当我在 onResume 中调用以下方法时,它不会得到任何文本,因为 hasPrimaryClip 为 false。但是在同一个屏幕上,如果我在任何按钮上调用相同的方法,那么它就可以正常工作并返回复制的文本。可能是剪贴板在 onResume 之后没有立即提供访问权限,并且在单击任何按钮时会有一些延迟,它允许访问。可能是什么问题?任何想法都值得高度赞赏。

谢谢

public String readFromClipboard() {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        if (clipboard.hasPrimaryClip()) {
            android.content.ClipDescription description = clipboard.getPrimaryClipDescription();
            android.content.ClipData data = clipboard.getPrimaryClip();
            if (data != null && description != null && description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
                return String.valueOf(data.getItemAt(0).getText());
        }
        return null;
    }

解决方法

我观察到的是,如果 hasFocus 为真,我们可以在 'onWindowFocusChanged(boolean hasFocus)' 方法中访问剪贴板数据。这种方法被称为大约。比 onResume 晚约 100 毫秒。因此,通过单击按钮进行复制工作正常,因为应用程序已经获得焦点。