在一些自动化测试等情景下,输入Android应用程序产生一些屏幕点击等的输入事件以实现特定需求。本文总结了几种Android中模拟产生输入事件的方式。
在Android中有两个shell中运行的工具可以模拟产生输入事件 input 和 sendevent 。由于sendevent需要用到相应的设备,需要考虑权限问题,因此一般不常用,这里只介绍input。
如点击屏幕(200,300)处只需要如下命令即可:
Instrumentation是Android提供的一个测试工具,可以通过它监测系统与应用程序之间的交互。使用此方法需要如下的 system 权限:
Instrumentation模拟点击屏幕(200,300)事件的方法如下:
Android Inputmanager的 injectEvent() 方法也可以模拟产生输入事件(API16以上版本)。不过此方法属于隐藏方法,需要反射调用,这里不作具体描述。
1 https://www.pocketmagic.net/injecting-events-programatically-on-android/#.VKn42M2UfCI
一、结构public final class InputMethodManager extends Object
Java.lang.Object
android.view.inputmethod.InputMethodManager
二、类概述
整个输入法框架(IMF)结构的核心API,应用程序之间进行调度和当前输入法交互。你可以用Context.getSystemService()取得这一接口的实例。
架构总述(Architecture Overview)
输入法框架(IMF)共有三个主要部分:
* 输入法管理器,管理各部分的交互。它是一个客户端API,存在于各个应用程序的context中,用来沟通管理所有进程间交互的全局系统服务。
* 输入法(IME) ,实现一个允许用户生成文本的独立交互模块。系统绑定一个当前的输入法。使其创建和生成,决定输入法何时隐藏或者显示它的UI。同一时间只能有一个IME运行。
* 客户应用程序,通过输入法管理器控制输入焦点和IME的状态。一次只能有一个客户端使用IME。
应用程序(Applications)
大多数情况下,使用标准TextView或其子类的应用程序只要做少量工作就可以让软键盘(soft input methods)正常工作。你要注意的是:
* 正确设置你的可编辑文本视图inputType,这样输入法有足够的上下文帮助用户向其输入文本。
* 当输入法显示时妥善处理隐藏屏幕空间。理想的情况下应用程序应处理窗口变小,如必要你可以利用系统执行平移窗口。你应在活动(activity)中设置windowSoftInputMode属性或调整创建窗口的相应值,以便系统决定平移或缩放(它会尝试自动调整但可能出错)。
* 你还可以通过相同的windowSoftInputMode控制窗口的首选软键盘状态(打开、关闭等)。
通过API可以与IMF及其IME交互实现更细致的控制,如显示或输入区域,用户选取某输入法等。
当你编写自己的文本编辑器的时候,你要实现onCreateInputConnection(EditorInfo)以返回你的InputConnection的接口实例,用来允许IME和你的文本编辑域来交互。
输入法(Input Methods)
一个输入法(IME)是Service(服务)的实现,通常继承自 InputMethodService。IME提供核心的 InputMethod接口,尽管提供InputMethod通常是由InputMethodService来处理,而IME的实现只需要处理更高层的API。
更多信息参阅InputMethodService。
安全(Security)
输入法关系到许多安全问题,因其基本不受约束地驱动UI并监视用户输入。Android输入法框架还允许调度第三方IME,所必须小心以限制他们的选择和相互作用。
以下是IMF背后安全架构的要点:
* 只允许系统访问经BIND_INPUT_METHOD权限许可访问IME的InputMethod接口。通过绑定到要求这个权限的服务来强制实现这一点。所以系统可以保证没有不被信任的客户端在它的控制之外访问到当前的输入法。
* IMF中可能有许多客户进程,但在同一时间只有一个是激活的。未激活客户端不能与IMF核心交互通过下述机制实现。
* 输入法客户端只可访问InputMethodSession接口。每个客户端创建一个接口实例,只有与激活客户相关联的会话的调用才会被IME处理。这点通过普通IME的 AbstractInputMethodService执行,必须由IME显式的处理,而IME正是InputMethodSession的自定义实现。
* 只有激活的InputConnection接受 *** 作。IMF通知每个客户进程是否激活,IMF忽略非激活进程对当前输入联接的调用。这确保了当前IME只将事件和文本编辑交付用户可见焦点的UI。
* 一个IME永远不能在屏幕关闭时与 InputConnection交互。这是通过当屏幕关闭时所有客户端无效,并防止不良IME在用户无法关注其行为时驱动UI。
* 客户应用程序可以要求系统选取一个新的IME,但不能编程式选择之一。这是避免恶意程序在用户导航到其它应用程序时,选择自己的IME并保持运行。也就是说,IME可以编程式的要求系统选择其它IME,因它完全控制了用户输入。
用户在可切换至一个新的IME前必须显式的启用它,以确认系统了解它,使其处于可用状态。
安卓手机键盘输入中文需要输入法的支持,以MIUI系统为例:
1、打开短信应用,进入短信编辑页面,调用输入法程序。
2、选择“拼音九键”或者是“拼音全键”输入,然后就可以输入中文了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)