Android:以编程方式从剪贴板中删除单个项目

Posted

技术标签:

【中文标题】Android:以编程方式从剪贴板中删除单个项目【英文标题】:Android: Delete single item from clipboard programmatically 【发布时间】:2019-01-04 00:19:06 【问题描述】:

android Clipboard-Service 只允许您将文本或其他项目添加到剪贴板中,在大多数 Android 设备上,Clipdata 项目将被插入到具有未定义的最大内容数的堆栈中。我的问题如下:我有一个密码管理器应用程序,它可以将选择的密码插入剪贴板,但由于密码是高度敏感的数据,我想在定义的超时时间过后删除插入的密码。所以我的问题如下:是否有可能获得对剪贴板条目的高级访问权限并以某种方式对其进行修改?我知道框架本身不允许这样做,但有没有一种 hacky 方法可以做到这一点?

【问题讨论】:

请不要发布我可以将空文本插入剪贴板,直到所有项目都被覆盖,这在我的智能手机上不起作用,当我尝试添加多个空字符串作为剪辑数据时,第一个将被添加其他都不是。顺便说一句,如果它可以在某些设备上运行,这是一种混乱的方式,因为我不关心剪贴板中的其他项目我只想删除从我的应用程序中插入的密码 【参考方案1】:

剪辑数据项将被插入到一个未定义最大内容数的堆栈中

“堆栈”的大小为 1。每个用户有一个系统剪贴板条目。例如,参见the Android 8.1 system service that implements the clipboard。每个PerUserClipboard 包含一个ClipData,而不是一个堆栈。

第三方应用程序可能会提供某种剪贴板扩展器,并且设备制造商或自定义 ROM 开发人员可能会修改 Android 处理剪贴板的方式。但是,这些超出了操作系统本身的范围。

是否有可能获得对剪贴板条目的高级访问权限并以某种方式对其进行修改?

您需要向开发人员询问提供此扩展剪贴板功能的任何内容。也许他们有一个您可以使用的 API。

您可以使用ClipboardManager 设置当前剪贴板条目;在 Android 9.0+ 上,您也可以使用 ClipboardManager 清除当前剪贴板条目。两者都会影响当前用户...但仅适用于单项系统剪贴板。

【讨论】:

我知道剪贴板只包含一个 ClipData 项目,但是这个 ClipData 项目包含多个条目,它们是 LIFO 排序的,所以我称之为堆栈。顺便说一句,我还指带有剪贴板条目的 ClipData 项目,抱歉这里的表达混乱...... @IdiAminDada: 好的,那么,如果你真的要问是否可以从ClipData 中删除一个ClipData.Item,这是不可能的,就像ClipDataClipData.Item 一样不提供修改的API。但是,您可以检索ClipData,尝试确认它是您的,然后使用旧项目中的所有项目构建一个新的ClipData,但您要删除的项目除外。然后,把修改后的ClipData放到剪贴板上。

以上是关于Android:以编程方式从剪贴板中删除单个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式从 Android 中删除 SQLite 数据库

如何删除 Windows 10 版本 1809 剪贴板历史记录?

如何在android中以编程方式从通知栏中删除通知?

在 Android 中以编程方式从启动器中删除应用程序

如何以编程方式从 Android 的默认应用列表中删除应用?

如何在android中以编程方式从收件箱中删除所有短信?