private UiDevice mDevice;
// 长按物理键
public boolean longPressKeyCode(int keyCode,int PressTime) {
try {
Field mUiAutomationBridge = Class.forName("android.support.test.uiautomator.UiDevice").getDeclaredField("mUiAutomationBridge");
mUiAutomationBridge.setAccessible(true);
Object bridgeObj = mUiAutomationBridge.get(mDevice);
Method injectInputEvent = Class.forName("android.support.test.uiautomator.UiAutomatorBridge")
.getDeclaredMethod("injectInputEvent",new Class[]{android.view.InputEvent.class,boolean.class});
final long eventTime = SystemClock.uptimeMillis();
KeyEvent downEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN,
keyCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0,
InputDevice.SOURCE_KEYBOARD);
if ((Boolean) injectInputEvent.invoke(bridgeObj, new Object[]{downEvent, true})) {
SystemClock.sleep(PressTime);
KeyEvent upEvent = new KeyEvent(eventTime, eventTime,
KeyEvent.ACTION_UP, keyCode, 0, 0,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0,
InputDevice.SOURCE_KEYBOARD);
if ((Boolean) injectInputEvent.invoke(bridgeObj, new Object[]{upEvent, true})) {
return true;
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return false;
}