首页 > 解决方案 > Android 10 中的剪贴板未按预期工作

问题描述

我已经实现了从剪贴板功能复制。因此,每当用户复制某些内容并在之后恢复我的应用程序时,我都会显示一个 Snackbar 来执行某些操作。它在 Android 9 中运行良好,但在 Android 10 中,根据策略更改,它没有观察后台剪贴板的变化。没关系,但是当我在 onResume 中调用以下方法时,它没有得到任何文本,因为 hasPrimaryClip 为假。但是在同一个屏幕上,如果我在任何按钮单击上调用相同的方法,那么它工作正常并返回复制的文本。可能是剪贴板在 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;
    }

标签: androidclipboardandroid-10.0clipboardmanager

解决方案


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


推荐阅读