好记性不如烂笔头。生活中多做笔记,不仅可以方便自己,还可以方便他人。

背景

有没有发现,有时候表情或图片的交流更能让气氛更愉悦。斗图,成了群里的日常小事,然而,当你没有图可斗的时候就尴尬了。最近,搜狗输入法提供了非常强大的各种斗图大全,这可不得了了,只要输入法你希望表达的意思的文字,就能搜到到相应意思的表情,这功能非常有意思。

最近,老大要我研究一下搜狗输入法是如何直接在微信和QQ上发图片和表情的。作为“”开发汪”,面对新的东西,内心是“”鸡冻”澎湃的,立马拍拍胸口“包在我身上”。

正文

1. 微信

二话不说,我先是google,百度了一番,结果什么有用的相关信息都没找到,因为输入法开发本来就非常少。于是开始猜测是通过微信SDK分享的,查阅了开发文档,确实,微信有分享图片和表情包的SDK。于是,我注册了一个开发者账号,等了几天,终于审核通过了。

然鹅,通过微信SDK分享的途径,虽然能分享,但是都必须跳转到选择好友界面,而不是直接在好友界面发送图片或表情。于是,我继续查阅,看看能否有方法绕过微信的SDK分享,然后,在CSDN上找到了这个:

//分享图片给朋友(不用微信sdk)  private void shareToFriend(Uri u){  Intent intent = new Intent();  ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");  intent.setComponent(comp);  intent.setAction(Intent.ACTION_SEND);  intent.setType("image/*");  intent.putExtra(Intent.EXTRA_STREAM, u);  startActivity(intent);  }

没错,通过这种方法,确实可以绕过微信的SDK,但是这种方法还是会跳转到选择好友界面。没办法,只好去反编译搜狗输入法apk来看看了。

从搜狗输入法在非微信界面分享图片的途径来看,应该是使用了微信的SDK分享的,于是反编译搜狗输入法后,通过关键字 WXEmojiobject 搜索,发现了下面:

结合上面代码截图来分析一下。通过代码上的注释 “。。。=====commit git expression in weixin =====。。。”,我可以肯定,我找到发送图片和表情的代码了。从代码的后半部分“ImediaObject wXEmojiObject。。。。。”来看,后半部分应该是在非微信界面的分享,使用的是微信的SDK。还有从前面的微信的包名: com.tencent.mm 也可以看出来 if 条件里面的就是微信聊天界面分享表情的代码,通过“IS_CHAT_EDITOR”可以判断是否是微信聊天界面,这个应该是跟微信约定好的。

好了,我们再来分析一下,从if里面内容来看,这里最终做了一个操作 a2.commitText(charSequence, 1) ,这个操作就是输入法用来提交文字的,也就是说搜狗输入法把一串文字提交到输入框,然后就发送了图片或表情。什么鬼?输入一串文字就能发送图片了?

还有一个细节,我确实忽略了。在我们发送表情或图片时,微信的编辑框上会闪现一串文字,没错,正是搜狗输入法提交到编辑框的那串文字。因为是闪现的,所以我们看不清,不以为然,我录屏截图看看:

恍然大悟,原来搜狗输入法这是把表情或图片的路径提交到编辑框,然后微信的编辑框自动就会帮你识别该图片。不信的话,可以试试在手机根目录下放一张图片,把路径粘贴到微信的聊天编辑框,它会马上识别到图片,然后让你点击确定发送的。

原来最强大的是微信的编辑框,可以识别文字路径下的图片。好了,真想大白了,如果你做的是输入法开发,那你也可以这样直接发表情和图片了。

搜狗输入法的表情包分为本地的和在线的,本地的可以通过发送路径,那在线的呢?这还不简单,把在线的下载到本地不就行了吗,表情非常小,所以下载也很快。我顺便发一下搜狗输入法的表情包保存位置吧:

1. 搜狗输入法本地表情包存放在"/storage/emulated/0/sogou/.expression/ ".
2. 网络表情包下载并保存到"/storage/emulated/0/Android/data/com.sohu.inputmethod.sogou/files/flx/net_images/ ".

目前是这样,不知道将来会不会改,你可以到这里面去看,里面保存了很多表情。

2. QQ

如法炮制,我也按照微信的套路,找找QQ聊天界面搜狗输入法是如何直接发送图片和表情的,在反编译的代码中,我也找到了相应的方法:

从代码上可以确定,代码我是找对了。

那我来分析一下吧。从代码主体上看,主要做了一件事,搜狗输入法向编辑框发送了一条私有命令 a2.performPrivateCommand(“com.sogou,inputmethod.expression”, bundle2); 其中的performPrivateCommand方法是InputConnection类的一个方法,是输入法用于向所连接的编辑框发送私有命令。发送的命令里面携带了一个bundle,bundle里面携带了图片或表情的路径,相应的key是“SOUGOU_EXP_PATH”。

所以,很显然,这是搜狗输入法跟QQ约定好的一个操作。我简单的尝试了一下,也通过发送这条命令,但是没有成功,那就不知道QQ里都干啥了。

结尾

好了,写到这里也差不多完了。东西虽然挺简单的,但还是写了出来,毕竟这也是自己的一次探索经历,毕竟,我是把这当笔记来写了。如有不服,欢迎来“搞”!哈哈哈!

分析Android 搜狗输入法在微信和QQ中发送图片和表情相关推荐

  1. android百度输入法表情符号,分析Android 搜狗输入法在微信和QQ中发送图片和表情...

    好记性不如烂笔头.生活中多做笔记,不仅可以方便自己,还可以方便他人. 背景 有没有发现,有时候表情或图片的交流更能让气氛更愉悦.斗图,成了群里的日常小事,然而,当你没有图可斗的时候就尴尬了.最近,搜狗 ...

  2. Android开发:高仿QQ,发送图片时炫酷的加载效果

    之前看到qq 的图片发送效果很酷炫,很吸引人,不过现在这个效果好像没有了.试了几次,决定试试实现.大致想了下,实现效果还不错 需要实现的效果 一图胜千言,看图如下: 怎样实现呢? 首先从图中看分两部分 ...

  3. 微信小程序中的图片处理

    微信小程序中的图片处理 微信小程序中的<image></image>用于向页面中插入图片.有两个重要的属性 1.src  要插入图片的资源地址 2.mode   图片裁剪.缩放 ...

  4. 微信小程序中进行图片压缩

    微信小程序中进行图片压缩 问题: 一般情况下,小程序在进行拍照识别的时候,上传图片的大小会使小程序出现冗余,这个时候,为了减少小程序的冗余 并且使上传的图片可以分辨出该图片中的内容是那些内容,我们就需 ...

  5. android微博分块,微信、微博刷屏利器 图片切割9Cut安卓版

    大家一定都在自己的微信朋友圈或者微博上看到有人分享的图片如下图中一样,图片被分割成了一块一块,当你点击的时候会发现它不是一张完整的图片,而是由9块图片组合而成的,可以是圆形.心形.或者其他不规则形状, ...

  6. android 微信高仿,Android 高仿微信发朋友圈浏览图片效果(转)

    最近一直在高仿微信.高仿微信,今天小编再给大家分享一个仿微信发朋友圈浏览图片的效果.... 好了,先看一下效果吧: 这里写图片描述 下面就来说一下具体怎么实现的: 实现思路 1.首先我们要获取数据源, ...

  7. Mac上微信、QQ的聊天图片和记录保存在哪?如何清理或导出?

    现在大家的日常生活中已经离不开微信.QQ,工作时也会常用它们在手机和电脑间互传一些重要的文件或图片.久而久之,发现微信.QQ占用的空间越来越大,想清理或导出文件却无从下手.在windows上可以通过& ...

  8. Android 高仿微信 你可能要发送的图片

    微信发送图片有个功能,就是当你拍完照片,或者保存一个张照片的时候,你点击聊天框的"+"号,微信会有个提示,你可能要发送的图片,并且附上相应的图片.要实现这个功能,分两个步骤. 1, ...

  9. Android 高仿微信发朋友圈浏览图片效果

    最近一直在高仿微信.高仿微信,今天小编再给大家分享一个仿微信发朋友圈浏览图片的效果.... 好了,先看一下效果吧: 下面就来说一下具体怎么实现的: 实现思路 1.首先我们要获取数据源,数据源就是我们的 ...

最新文章

  1. 巧用宏定义进行调试 (转)
  2. 微服务的接入层设计与动静资源隔离
  3. 转行python经验_【经验分享】转行如何自学Python并且找到工作,分享自己心得
  4. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...
  5. Computer:计算机测试理论(开发/测试/上线)之DEV、SIT、UAT、PRD四套环境详细介绍之详细攻略
  6. SQL SERVER 通用分页存储过程
  7. 苹果更新watchOS 7.3.1:修复Apple Watch进入省电模式后无法充电的问题
  8. opencv 轮廓层次结构
  9. php实参和形参不一致的情况
  10. 面经——小马智行2022秋招嵌入式
  11. 事务 - TCC模式
  12. 处理IOStream异常
  13. AP注册不上线(现网中存在其它厂商的控制器)
  14. 何谓赛道思维?隔壁阿三加密货币赛道重启,我们何时迎头赶上?
  15. 机器学习中几种常见的乘积(product)
  16. Pearson 相关系数--最佳理解及相关应用
  17. Leetcode_137_Single Number II
  18. Vulnhub_gigachad_vh
  19. 【题解】LuoGu1133:教主的花园
  20. python将10到1递减_程序在Python中找到最长严格递增然后递减的子列表的长度

热门文章

  1. 蟋蟀蝙蝠的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  2. react native Android 键盘将底部导航栏/按钮顶起
  3. 过年了!!年前最后一更,2017年总结
  4. 达内python怎么样_在达内学Python怎么样?我能学会吗?
  5. keras 多输入多输出网络
  6. delphi7的程序在英文系统下显示中文乱码
  7. MAC 部分目录作用
  8. 阿里面经总结:阿里三面+交叉面+hr面试
  9. 密码爆破工具:Medusa(美杜莎)-操作说明
  10. 鸿蒙升级包7g,首个华为鸿蒙2.0续航测试来了!实打实10%提升