2015-05-29 20 views
1

我想假觸摸事件,我已經得到了可能的答案here。但是,當我嘗試使其工作時,它不起作用。Android - 「僞裝」觸摸事件不起作用

請注意,我正在線程中運行以下代碼。

private Handler handler = new Handler(Looper.getMainLooper()); 

private final Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     View ParentView = (View)view.getRootView(); 
     long downTime; 
     long eventTime; 

     Log.v("Screen Tapper", "Start Tapping"); 

     Log.v("Screen Tapper", "tapTimes ----- "+1); 
     downTime = eventTime = SystemClock.uptimeMillis(); 
     MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x-5, y-5, 0); 
     ParentView.onTouchEvent(event); 
     Log.v("Screen Tapper", "touchDown ----- "+x+","+y); 

     handler.postDelayed(runnable, 100000); 

     downTime = eventTime = SystemClock.uptimeMillis(); 
     MotionEvent event2 = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x-5, y-5, 0); 
     ParentView.onTouchEvent(event2); 
     Log.v("Screen Tapper", "touchUp ----- "+x+","+y); 

     handler.postDelayed(runnable, 100000); 
    } 
}; 

當我要啓動或停止線程我基本上叫

Handler.post(runnable);

Handler.removeCallBack(runnable);

然而,這種方法是行不通的。

我在多個遊戲甚至我自己的應用程序上都試過了。 我知道這個線程正在運行,因爲日誌記錄正在工作。但是按鈕只是沒有被按下。

任何幫助表示讚賞

+0

「我在多款遊戲甚至是我自己的應用程序上都試過它」 - 它肯定不會在任何其他應用程序上運行。您無法以這種方式將假觸摸輸入發送到其他應用程序。充其量,這種事情可能在你自己的應用程序上工作。 – CommonsWare

+0

謝謝,但我希望它可以在其他應用程序上工作。有沒有辦法?或者只是沒有辦法做這樣的事情? – Fish

回答

1

這是不可能的任意假觸摸事件發送到其他應用程序,也許除了Root權限的裝置。即使在那裏,它也會通過低級別的Linux輸入東西AFAIK而不是通過Android SDK。