专栏首页Android群英传Clipboard还能玩出花

Clipboard还能玩出花

前言

今天和老婆去看了场电影——奇异博士,又名『论如何有效的退出死循环』,片子还不错,值得一看~

看完回来顺便把这篇文章写了,赶紧把知识记录下来,毕竟,电影里面各种绝学,都是记在书里的,卡玛·泰姬,没错,我就是要成为Doctor Strange的Doctor Xu!

Clipboard是Android提供的一个系统服务,它提供了一个全局的剪贴板,让文字、图片、数据,在多App间共享成为可能,今天,我们来了解下它的真面目,以及被玩坏的新姿势。

老规矩,Google API文档镇楼: https://developer.android.com/guide/topics/text/copy-paste.html

说实话,如果不是为了让Clipboard玩出花,我真不想写这一篇,因为——这文档写的真是太TM详细了。

Clipboard应用

我们先来看看一些App对Clipboard的应用,例如手机迅雷,如果你复制了一个链接,那么打开迅雷后,会自动检测并提示下载:

再例如一些翻译软件,例如有道词典、沪江小D,他们都有一个功能,即复制查词,使用的也是这个原理,我这没装这些App,就不截图了,再例如比较常用的手淘喵口令,实际上也是利用这个功能,当然,也有一些比较专业的Clipboard App,例如Clipboard Actions:

我们可以看见,实际上,他就是帮你解析了各种可能的剪贴板,并对他们提供了各种后续功能的集合,确实非常实用,不过,看完今天的文章,相信你要写一个这样的App,估计也就分分钟。

OK,这些就是一些Clipboard的基本使用场景,更多场景,没有做不到,只有想不到。

基本使用

Clipboard的基本使用,就是三部曲。

获得ClipboardManager:

Copy:

Paste:

结束了,简直不能再简单,API文档也写的非常详细,Demo都写了好几个。

不止于文字

我们可以创建以下三种类型的ClipData:

类型

描述

Text newPlainText(label, text)

返回ClipData对象,其中ClipData.Item对象包含一个String

URI newUri(resolver, label, URI)

返回ClipData对象,其中ClipData.Item对象包含一个URI

Intent newIntent(label, intent)

返回ClipData对象,其中ClipData.Item对象包含一个Intent

对应的,我们也能获取到不同类型的ClipData。

ClipboardManager管理

ClipboardManager中有很多判断与操作方法:

类型

描述

getPrimaryClip()

返回剪贴板上的当前Copy内容

getPrimaryClipDescription()

返回剪贴板上的当前Copy的说明

hasPrimaryClip()

如果当前剪贴板上存在Copy返回True

setPrimaryClip(ClipData clip)

设置剪贴板上的当前Copy

setText(CharSequence text)

设置文本到当前Copy

getText()

获取剪贴板复制的文本

玩出一朵小FaFa

在了解了上面这些内容后,我们就可以做一些比较有意思的东西了,例如,我们可以通过监控用户剪贴板中的内容,来做一些自动的推断,例如,用户复制了一个英文单词,那么我们可以推断,用户可能要进行翻译,再例如,用户复制了一个链接,那么我们也可以推断,用户可能需要打开这个链接,等等。

Google在文档中,直接给出了示例的代码:

其实非常简单,就是判断三种复制类型,但是我们可以在App中设置一些类似Scheme的标记,用来进行一些功能的区分,就好像淘宝的喵口令——『喵口令XXXXXXX喵口令』,我们可以通过解析这些Scheme,来获取内容,并进行对应的操作。这也是我们前面提到的Clipboard Actions这个App做的事情。

玩出一朵大FaFa

我们首先来看ClipData.Item.coerceToText()这样一个方法,这个方法可以将剪贴板里面的内容,直接转化为文字,但是这个转换,是有一定算法的,在API文档中有比较详细的说明,这里简单的看下:

这个东西能干什么呢,我们知道,有些App会复制之后,打开一个Intent,为了简单,会直接通过ClipData.Item.coerceToText()来返回一个Intent的URI,然后通过解析URI来启动Intent,那么这里就可以被我们来利用了。

其实不一定是通过Fake Intent,其它的文字、图片等等,都可以被『偷天换日』。

另外,要实现这个监听,我们需要注册一个回调——addPrimaryClipChangedListener,Android真是体贴到没朋友:

那么在这里,我们就可以完全实现剪贴板的『狸猫换太子』。那么假如我们是一个『某淘』软件的竞品,那么完全可以让『汪口令』失效,甚至替换为我们自己的应用,同理,还有一些翻译类软件也是一样,不过还好,也许是我的内心比较阴暗,目前还没有看见这样的App。

本文分享自微信公众号 - Android群英传(android_heroes),作者:徐宜生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-11-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入Java源码解析容器类List、Set、Map

    用户1907613
  • 一触即发——App启动优化最佳实践

    用户1907613
  • 去除 MIUI 的负一屏

    用户1907613
  • WordPress实现QQ卡片链接

    QQ发出去一个网址后,在展示的时候,他会快速抓取网站的内容(标题,缩略图,描述)进行展示,抓取有特殊标记的内容,快速展示出来。我们可以通过在head部分加标签的...

    神无月
  • Groovy语法系列教程之布尔(五)

    本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。

    DevOps持续交付
  • 将Spring Boot作为守护进程启动的一种简单的方法

    我有一个SpringBoot应用,通过shell脚本start.sh启动。现在我期望通过守护进程的方式启动这个应用,这样我即使关掉终端,该应用也能继续运行。

    Jerry Wang
  • 如何转换png图片为jpg图片

    最近在工作中会遇到需要将 png 图片转换为 jpg 图片的需求,主要原因也是 png 图片占的空间太大,如果图片数量上万张,可能就需要十几G的存储空间,所以希...

    材ccc
  • 国产工具:渗透测试助手PKAV HTTP Fuzzer发布

    渗透测试的各位高手们,是不是还在为找不到一个好帮手而郁闷呢?别郁闷了,我来帮你!PKAV HTTP Fuzzer绝对是一你一用就会爱上的好帮手! 但是我们开发这...

    FB客服
  • iOS开发中简单的图片浏览器

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 2019年末逆向复习系列之拼夕夕Web端anti_content参数逆向分析

    这篇文章是公众号《云爬虫技术研究笔记》的《2019年末逆向复习系列》的第八篇:《拼夕夕Web端anti_content参数逆向分析》

    云爬虫技术研究笔记

扫码关注云+社区

领取腾讯云代金券