如果您正在运行 UI Automator 测试,您可以使用两种技术,具体取决于设备的 Android 版本:
API 21+
如果您只针对 API 18 或更高版本,则可以只使用 shell:
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
device.executeShellCommand("input text 1234"); // Type '1234'
device.executeShellCommand("input keyevent 66"); // Press the Enter key
API 18+
如果您还支持 API 18-19,那么您将无法使用 shell,因为它不可用,并且如果您正在与不是您自己的应用(例如系统 UI)进行交互,则您无法使用检测密钥注入。请改用UiAutomation.injectInputEvent()。
获取UiAutomation 的实例并存储在某处:
UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
然后定义一些辅助方法:
private void sendKey(int keyCode) {
sendKeyEvent(keyCode, KeyEvent.ACTION_DOWN);
sendKeyEvent(keyCode, KeyEvent.ACTION_UP);
}
private void sendKeyEvent(int keyCode, int action) {
long downTime = SystemClock.uptimeMillis();
KeyEvent event = new KeyEvent(
downTime,
downTime,
action,
keyCode,
0,
0,
KeyCharacterMap.VIRTUAL_KEYBOARD,
0,
KeyEvent.FLAG_FROM_SYSTEM,
InputDevice.SOURCE_KEYBOARD
);
uiAutomation.injectInputEvent(event, true);
}
然后像这样使用它:
sendKey(KeyEvent.KEYCODE_1);
sendKey(KeyEvent.KEYCODE_2);
sendKey(KeyEvent.KEYCODE_3);
sendKey(KeyEvent.KEYCODE_4);
sendKey(KeyEvent.KEYCODE_ENTER);