Android 复制完内容后会监听到多次剪贴板变化该怎么办?(onPrimaryClipChanged方法会执行多次)

最近看到剪贴板数据监听会多次回调的问题,上网搜了下发现大家都是通过判断两次收到回调的时间间隔来判断的。觉得这种方式有点走偏门的感觉,于是研究了下这块,得出了以下的总结:

第一步:请检查你是否重复添加了该Listener,例如这样:

复制代码
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(listener);
clipboardManager.addPrimaryClipChangedListener(listener);

如果你多次添加该Listener,你会发现当有复制内容时,会收到很多次回调。

第二步:如果没有上述问题,请使用如下方式规避:

复制代码
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
    @Override
    public void onPrimaryClipChanged() {
        ClipData data = clipboardManager.getPrimaryClip();
        long clipDataTimestamp = data.getDescription().getTimestamp();
        // 拿这个时间戳和上一条剪贴板数据获取到的时间戳做比较,如果相同则表示是同一条数据,不处理即可。
    }
});
相关推荐
冬奇Lab5 小时前
MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车
android·音视频开发·源码阅读
炸炸鱼.7 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
用户41659673693558 小时前
nextlib 项目架构与深度技术指南 (Architecture & Technical Master Guide)
android
aq55356009 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
Trouvaille ~9 小时前
【MySQL篇】数据类型:存储数据的基础
android·数据库·mysql·adb·字符集·数据类型·基础入门
2401_8858850410 小时前
开发视频短信接口好开发吗?图文视频短信接口对接教程
android·音视频
千码君201612 小时前
kotlin:Jetpack Compose 给APP添加声音(点击音效/背景音乐)
android·开发语言·kotlin·音效·jetpack compose
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.12 小时前
MySQL半同步复制与GTID实战详解
android·mysql·adb
用户416596736935513 小时前
深度解码:记一次视频时间戳(PTS)异常导致的播放故障排查
android
大白菜和MySQL15 小时前
linux系统环境常用命令
android·linux·adb