一种Android应用内输入关键字拦截的方法技术

技术编号:20745908 阅读:24 留言:0更新日期:2019-04-03 10:30
本发明专利技术公开了一种Android应用内输入关键字拦截的方法,包括以下步骤:步骤1:启动Android应用;步骤2:初始化输入环境;步骤3:在拦截点对应用程序获取的通道进行代理,然后提交到系统输入法管理系统;步骤4:用户在输入法应用端输入内容;步骤5:通过拦截通道来获取到用户输入的内容;步骤6:获取输入内容后,对输入的关键字进行处理;步骤7:将关键字处理后的内容提交进系统输入法管理系统,并通过控件进行显示。本发明专利技术采用上述方法,能够实现应用内关键字拦截,无需修改应用的源码,适配性强,且拦截效率高,用户体验好。

【技术实现步骤摘要】
一种Android应用内输入关键字拦截的方法
本专利技术属于关键字拦截领域,具体涉及一种Android应用内输入关键字拦截的方法。
技术介绍
目前,android智能手机已经十分普及了,对于一些行业对关键信息比较看重的领域,或者对用户输入信息进行大数据审计分析的领域,信息的输入显得特别重要。怎样才能在不改变输入法源码的状态下,安全、快速实现关键字拦截,成为了眼下的一个研究课题。目前,现有的一些现成方案或多或少都存在一定的缺陷:1)OnKeyListener,实现EditText的OnKeyListener并不能拦截EditText的输入,OnKeyListener只能够监听到一些按物理键事件,例如菜单键、返回键、音量键等,而输入法作为一个单独的进程,EditText与输入法的通讯显然是OnKeyListener所无能为力的;2)TextWatcher,相信很多人做这个功能的第一反应都是使用TextWatcher,因为TextWatcher可以监听到EditText输入前后内容的变化,但那也只是监听到而已它并没有办法真正拦截到输入,而只是在某一字符输入发生后,对EditText做一个事后的处理。典型的例子如下,假设我监听到了”s“的输入,但实际上我是不允许”s“输入的,那么我在TextWatcher中监听到”s“输入了以后,重新设置EditText的内容。但这样做的恶果就是重设EditText的内容后,又会回调TextWatcher的那几个方法,造成死循环。当然您可以设置一个标志位来停止这个循环,但麻烦不止于此。因为你是先让字符输入,然后再手动把它删除,那么这其中涉及到的光标位置调整,漏洞百出。
技术实现思路
为了克服现有技术的不足,本专利技术提出一种Android应用内输入关键字拦截的方法,解决现有的拦截方法没法真正实现输入拦截,而要实现输入拦截需要进行各种修改,不仅会导致各种漏洞,而且适配性较差、用户体验不好的问题。本专利技术为实现上述目的,采用以下技术方案实现:一种Android应用内输入关键字拦截的方法,包括以下步骤:步骤1:启动Android应用;步骤2:初始化输入环境;步骤3:在拦截点对应用程序获取的通道进行代理,然后提交到系统输入法管理系统;步骤4:用户在输入法应用端输入内容;步骤5:通过拦截通道来获取到用户输入的内容;步骤6:获取输入内容后,对输入的关键字进行处理;步骤7:将关键字处理后的内容提交进系统输入法管理系统,并通过控件进行显示。进一步地,作为优选技术方案,所述步骤3中,hook机制下,代理输入法与Android应用的交互通道interfaceInputConnection的接口。进一步地,作为优选技术方案,所述步骤5中,通过androidAPI拦截InputMethodManager的调用,接着通过InputMethodManager服务获取mServedInputConnectionWrapper的connection,再通过反射IInputConnectionWrapper类获取mInputConnection的变量,实现获取用户的输入。进一步地,作为优选技术方案,所述步骤6中,对关键字的处理包括替换、过滤、记录及上报。进一步地,作为优选技术方案,所述步骤6中,通过本地实现一个类implementsInputConnection接口重写,以替换应用的InputConnection对象而进行关键字的拦截替换。本专利技术与现有技术相比,具有以下优点及有益效果:(1)本专利技术通过androidAPI拦截InputMethodManager的调用,接着通过InputMethodManager服务获取mServedInputConnectionWrapper的connection,再通过反射IInputConnectionWrapper类获取mInputConnection的变量,并通过本地实现一个类implementsInputConnection接口重写,以替换应用的InputConnection对象而进行关键字的拦截替换,从而实现了真正意义上的关键字拦截,且不需要修改应用的源码,适配性强。(2)本专利技术对于企业管理者来说,对应企业管理者来说,可以在员工处于无感知的状态下,监控员工的输入内容,且对一些敏感词汇进行替换、记录或者上报等操作,可以对员工的输入行为、使用词汇及输入习惯进行分析,起到辅助了解员工的目的。(3)本专利技术可以准确记录整个手机或者平板电脑上的应用的用户输入信息,并对用户输入信息进行过滤、统计、分析,并可进一步分析用户行为,另外,对高频词汇的收集及研究也有非常重要的意义。附图说明图1为本专利技术的方法流程图;图2为本专利技术的应用内拦截某个输入的过程示意图。具体实施方式下面结合实施例对本专利技术作进一步地详细说明,但本专利技术的实施方式不限于此。实施例:如图1、图2所示,本实施例所述的一种Android应用内输入关键字拦截的方法,包括以下步骤:步骤1:启动Android应用;步骤2:初始化输入环境;步骤3:在拦截点对应用程序获取的通道进行代理,然后提交到系统输入法管理系统;步骤4:用户在输入法应用端输入内容;步骤5:通过拦截通道来获取到用户输入的内容;步骤6:获取输入内容后,对输入的关键字进行处理,比如替换、过滤、记录及上报等;步骤7:将关键字处理后的内容提交进系统输入法管理系统,并通过控件进行显示。在本实施例中,对于android系统而言,应用、输入法、系统三者相互依赖,相辅相成地工作,在大量的开发中我们发现InputConnection.java是连接用户应用的桥梁,该接口还有commitText这个重要的方法,事实证明只要代理InputConnectionWrapper相关的InputConnection,而这个类的实现方法中有多个极为可靠的方法,比如提交文本和按键事件,继承于InputConnectionWrapper,实现自己的InputConnection并且再替换返回。在自定义的InputConnectionWrapper类中,可实现输入法输入和按键时间的相关方法的拦截。在某些方法中,如果执行父类的某些方法后返回true,那么表示不拦截;如果返回false,则表示拦截;至此拦截输入控件view与输入法的通讯已经成功实现。本实施例中,由于interfaceInputConnection是输入法与Android应用的交互通道,通过动态代理该交互通道的接口并重写该接口,即可实现输入法提交的相关文本的关键字的拦截,并将拦截处理后的文本再次提交到文本域。因此,只需要选择合适的hook点,即可达到拦截的目的。本实施例通过androidAPI拦截InputMethodManager的调用,当应用启动时,调用某些方法时通过接着通过InputMethodManager服务而获取mServedInputConnectionWrapper的connection,再通过反射IInputConnectionWrapper类获取mInputConnection的变量,本地实现一个类implementsInputConnection接口重写其方法方法,达到替换应用的InputConnection对象,进而获本文档来自技高网
...

【技术保护点】
1.一种Android应用内输入关键字拦截的方法,其特征在于,包括以下步骤:步骤1:启动Android应用;步骤2:初始化输入环境;步骤3:在拦截点对应用程序获取的通道进行代理,然后提交到系统输入法管理系统;步骤4:用户在输入法应用端输入内容;步骤5:通过拦截通道来获取到用户输入的内容;步骤6:获取输入内容后,对输入的关键字进行处理;步骤7:将关键字处理后的内容提交进系统输入法管理系统,并通过控件进行显示。

【技术特征摘要】
1.一种Android应用内输入关键字拦截的方法,其特征在于,包括以下步骤:步骤1:启动Android应用;步骤2:初始化输入环境;步骤3:在拦截点对应用程序获取的通道进行代理,然后提交到系统输入法管理系统;步骤4:用户在输入法应用端输入内容;步骤5:通过拦截通道来获取到用户输入的内容;步骤6:获取输入内容后,对输入的关键字进行处理;步骤7:将关键字处理后的内容提交进系统输入法管理系统,并通过控件进行显示。2.根据权利要求1所述的一种Android应用内输入关键字拦截的方法,其特征在于,所述步骤3中,hook机制下,代理输入法与Android应用的交互通道interfaceInputConnection的接口。3.根据权利要求1所述的一种Android应用内输入关键字拦截的方法,其特征在于,所述步骤5中...

【专利技术属性】
技术研发人员:王伟桂艳峰丁俊一陈电波田旭宏
申请(专利权)人:北京指掌易科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1