Android上的模擬點擊

模擬點擊在 Android 上有2種情況:
1,只模擬點擊自己的頁面;
2,只要自己進程活着,不管是哪個應用在前臺,都可以模擬點擊;

第一種情況比較簡單:
  long downTime = SystemClock.uptimeMillis();
  float x = 200;
  float y = getResources().getDisplayMetrics().heightPixels - 200;
  final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
  final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x, y, 0);
  View view = findViewById(R.id.root);
  view.dispatchTouchEvent(downEvent);
  view.dispatchTouchEvent(upEvent);
  downEvent.recycle();
  upEvent.recycle();

有人可能發現了,這第一種模擬點擊自己的頁面,貌似沒什麼意義,因爲既然是自己的頁面,代碼都是我們自己寫,可以直接走點擊的方法,不需要這麼麻煩。不過還是有些特殊場景可能需要的,比如模擬點擊廣告。

第二種情況:

1,之前寫過一篇《牛逼的AccessibilityService》

2,如果是 root 手機或者是系統應用, 可以添加權限:

<uses-permission android:name="android.permission.INJECT_EVENTS"/>  

則可以使用:

 AsyncTask.execute(new Runnable() {
     @Override
     public void run() {
         // 必須在 子線程
         Instrumentation mInst = new Instrumentation();
         mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0));
         mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0));
     }
 });

sendPointerSync 實際利用的是 InputManager 的 injectInputEvent 方法;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章