android 下列代碼實現物理鍵同時按下“Shift”與“1”鍵盤的效果,打出效果就是“!”,
new Thread() {
public void run() {
try {
if (instru == null) {
instru = new Instrumentation();
}
// 通過keycode來執行相應操作
long downTime= SystemClock.uptimeMillis();
long eventTime= downTime;
instru.sendKeySync(new KeyEvent(downTime,eventTime,KeyEvent.ACTION_DOWN,keyc ,0, KeyEvent.META_SHIFT_ON));
instru.sendKeySync(new KeyEvent(downTime,eventTime,KeyEvent.ACTION_UP, keyc,0, KeyEvent.META_SHIFT_ON));
} catch (Exception e) {
Log.e("wxception when onEvent:", e.toString());
}
}
}.start();
這裏用到了keyevent構造函數裏的元狀態值實現,一般android都用不到,所以基本上都傳的none,但其實是可以傳入shift的。
當然還有其他的鍵位
"META_SHIFT_ON",
"META_ALT_ON",
"META_SYM_ON",
"META_FUNCTION_ON",
模擬滑動事件
private void sendHover(final float x,final float y,final int isup){
new Thread(new Runnable() {
@Override
public void run() {
//Log.e("nodes","sendhover");
Instrumentation iso=new Instrumentation();
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN, x, y, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_MOVE, x, y, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis()+20,MotionEvent.ACTION_MOVE, x, y-30*isup, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis()+40,MotionEvent.ACTION_MOVE, x, y-60*isup, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis()+60,MotionEvent.ACTION_MOVE, x, y-90*isup, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis()+60,MotionEvent.ACTION_UP, x, y-90*isup, 0));
}
}).start();
}
模擬點擊事件
private void sendEvent(final float x,final float y){
new Thread(new Runnable() {
@Override
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0));
inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0));
}catch (Exception ex){
ex.printStackTrace();
}
}
}).start();
inputBox.setSelectAllOnFocus(true);
if(inputBox.hasFocus()){
inputBox.selectAll();
}
}
模擬長按事件
private void sendLongTouch(){
new Thread(new Runnable() {
@Override
public void run() {
Instrumentation iso=new Instrumentation();
float x = imgMouse.getX();
float y = imgMouse.getY();
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN, x, y, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_MOVE, x, y, 0));
iso.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis()+1000,MotionEvent.ACTION_UP, x, y, 0));
}
}).start();
}