android - 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;
}
解决方案
我观察到的是,如果 hasFocus 为真,我们可以在 'onWindowFocusChanged(boolean hasFocus)' 方法中访问剪贴板数据。这种方法被称为约。比 onResume 晚约 100 毫秒。因此,通过单击按钮进行复制工作正常,因为应用程序已经有了焦点。
推荐阅读
- clang - Nix 的 clang 不会构建 wasm
- python - 与 xlwings ws.range 一起使用时,for 循环不起作用
- java - AsyncTask 正常工作的线程规则,规则 1 和规则 5?
- angular - 使用服务将数据从非同级组件传递到 Angular 中的另一个组件
- reactjs - 如何在 Vite 配置中更改 antd 主题?
- web-scraping - 来自 Airbnb 的 Webscraping RequestGet 无法正常工作
- javascript - 我可以让用户将本地文件设置为 javascript 中 div 的背景图像吗
- azure - 如何从 AKS pod 收集 Windows 事件日志(系统事件日志、应用程序事件日志)?
- javascript - webpack 中的多编译器和多入口点有什么区别?
- flutter - Dynamic list not maping from json Data