QQ闪照

在IM工具中,QQ较之于微信一直是比较前卫的,毕竟年轻用户居多。比如QQ闪照就是一个有趣的功能,而且已经推出很久了(记得大概是V6.5左右):不管单聊还是群聊都可用,在发送图片时勾选闪照即可,发送成功后所有人都只能看5秒,时间结束后图片被“销毁”,UI层面被打上厚厚的马赛克。

这个功能一经推出,不少老司机可谓是既爱又恨,我们暂且不说其功能意义和影响。但是相信大家都思考过,怎么把闪照保存下来?

接下来我们就以Android端QQ为例探索一下闪照的持久化存储方式。

截图

想多了哈哈,Android端QQ是直接禁止在闪照页面截图的,所以这条路走不痛。

1
2
// 禁止截屏一行代码搞定
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

突破5秒限制

这个方法非ROOT用户就不用想了,原理上可以通过类似Xposed的框架来修改这个时间限制,以达到一直查看图片的目的,当然这种做法也比较危险,不排除被腾讯封号。

找图片文件

图片消息本质上还是一张图片,肯定是会生成磁盘缓存的,只不过在查看后会删除或者加密文件。网上搜罗之后也有很多类似的方法,原理简单,就是收到闪照消息后,不要查看,而是根据文件修改时间找到相应的存储目录,把里面的文件复制出来。

比如早期的时候是在 /Android/data/com.tencent.mobileqq/Tencent/MobileQQ/diskcache/ 目录下面,后来又把diskcache改成了 chatpic/chatimg ,总之手Q团队会经常变换目录,不是很好找。并且在Android 11之后谷歌加强了外部存储的隐私权限(参考:Android 11 中的存储机制更新),通过文件管理器查看 Android/data 目录的时代一去不复返了。

MIUI传送门

不知道有多少人会使用这个功能,在MIUI上默认并不是开启的(在设置 - 特色功能下面)。这个玩意早期很简单,就是MIUI系统层面做了拦截,在长按各种文本控件(TextView)时,会自动提取其中的文字——这个其实在某些时候非常方便,比如不可复制的文本。

在某一个版本更新后,图片控件(ImageView)也能提取了。我在偶然一次看QQ闪照时,发现闪照里面的内容可以被传送门抓到,并且保存在本地。这活生生就是个系统级别的外挂呀!

具体操作非常简单,只要打开了传送门功能,在长按查看QQ闪照时,屏幕右边缘就会弹出“图片识别”的按钮,点击就可以提取了(右下角还贴心地做了个保存按钮,最终图片会保存在 MIUI/taplus 下面):

引申

后来我想到很多微信里的表情就是没法像QQ一样保存到本地的,MIUI传送门也可以解决这个问题,只需在表情查看详情页面长按图片即可。