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

背景

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

最近,老大要我研究一下搜狗输入法是如何直接在微信和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 微信输入法表情,分析Android 搜狗输入法在微信和QQ中发送图片和表情相关推荐

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

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

  2. 分析Android 搜狗输入法在微信和QQ中发送图片和表情

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

  3. android输入法框架分析,Android与iOS输入法开发框架比较谈

    对于任何一个使用手机的人,有一样工具是不可能缺少的,它既不是微信之类的社交工具,也不是支付宝之类的金融工具(事实上这两个都越界了),而是输入法这样的输入工具.更重要的是,输入法还是一种特权工具,因为它 ...

  4. android百度输入法源码,Android内置第三方输入法

    Android内置第三方输入法 本篇讲诉如何再安卓源码中内置第三方输入法,并设为默认输入法启动,以及过程中可能引起的一些其他系统Bug处理: 内置输入法关联源码 各第三方输入法ID 以讯飞为例内置方法 ...

  5. android view 源码分析,Android ViewPager源码详细分析

    1.问题 由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返. 那么,关于ViewPager有什 ...

  6. android布局时长分析,Android性能优化:布局优化 详细解析(含、、讲解 )

    前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的布局优化,希望你们会喜欢. 目录 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. ...

  7. android 通话的log分析,Android Telephony 接电话流程分析

    写在前面的话 本文主要分析Android 接电话的流程,研究的代码是Android 4.4的,现在我们只关注framework层,以CDMA为例,GSM同理. 如果图片看不清的话,可以右键选择在新标签 ...

  8. android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...

    本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...

  9. android launcher3源码分析,Android Launcher3源码分析与修改

    Launcher和Setting是客户需求经常改动的地方,不过其代码量也不容小觑.今天就初略来看一下,以下内容都是本人查阅资料加上自己的理解得出,由于自己水平有限,如果误导还请指出: 先从Androi ...

  10. android书籍推荐!分析Android未来几年的发展前景,灵魂拷问

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xFWphp75-1615366380707)(//upload-images.jianshu.io/upload_ima ...

最新文章

  1. ArcSDE建Table在ArcCatalog中不可见
  2. PAT甲级1115 Counting Nodes in a BST (30分):[C++题解] 递归建二叉搜索树、dfs求一层结点数量
  3. 一个SAP顾问的回忆:我过去很胖!
  4. 使用DOM Breakpoints找到修改属性的Javascript代码
  5. python数据分析报告主题_【原创】python主题LDA建模和t-SNE可视化数据分析报告论文(代码数据)...
  6. 图嵌入综述 (arxiv 1709.07604) 译文五、六、七
  7. 【实战项目】采用jeecg3.2框架,一个人写的购物系统
  8. iPhone 12性能首曝:6GB内存、A14“挤牙膏”
  9. 【学习笔记】OSG 基本几何图元
  10. Android系统信息获取 之六:网络连接状态信息获取
  11. connot+connect+mysql+127.0.0.1_无法远程连接 MySQL 的解决方法
  12. 美发布《2025年的数学科学》报告
  13. mali GPU 官网指南
  14. 麻省理工线性代数第三讲
  15. OpenNESS OpenVINO Demo 部署
  16. 机器非正常关机 出现ora-01033 oracle,oracle ORA-01033问题的解决办法
  17. android外接键盘打汉字,安卓手机外接键盘怎么切换输入法?
  18. 西瓜书读书笔记(一)
  19. 网页框架布局设计_实用的网页设计-框架和框架用法介绍
  20. touchjs中,touch的使用

热门文章

  1. 【芯片学习】X86 CPU 发展历史与分析——1971~2020——明白Intel架构的变迁
  2. baidumap vue 判断范围_vue-baidu-map 行政区域划分
  3. 找到某个关键字 同义词词林 python_python基础——标识符
  4. Mac Osx X86 10.4.7,确实不错
  5. 【JAVA程序设计】(C00075)基于SSM的网上汽车租赁管理系统
  6. stm32 matlab 滤波器,STM32实现IIR滤波器,可用matlab生成的头文件
  7. css实现3d旋转图片魔方
  8. Javascript es6 在线编辑器
  9. PLC与工业DTU接线快速入门
  10. chrome浏览器版本和driver版本对照表