2013-04-17 28 views
4

我想用指定的時間長按指定的點。不幸的是,就像長按類沒有一種方法:UiDevice 我大概可以寫自己的方法,這樣的事情:Android UIAutomator長按設備

private void longClick(int x, int y, long time) { 
    android.graphics.Point point = new android.graphics.Point(x, y); 
    android.graphics.Point[] points = new android.graphics.Point[2]; 
    points[0] = point; 
    points[1] = point; 
    getUiDevice().swipe(points, time/5); // according to documentation, each step lasts 5ms 
} 

或使用反射和調用longTap:

private void longClick(int x, int y) { 
    Field mUiAutomationBridgeField = getUiDevice().getClass().getDeclaredField("mUiAutomationBridge"); 
    mUiAutomationBridgeField.setAccessible(true); 
    Object mUiAutomationBridge = mUiAutomationBridgeField.get(getUiDevice()); 
    Field mInteractionControllerField = mUiAutomationBridge.getClass().getDeclaredField("mInteractionController"); 
    mInteractionControllerField.setAccessible(true); 
    Object mInteractionController = mInteractionControllerField.get(mUiAutomationBridge); 
    Method longTap = mInteractionController.getClass().getDeclaredMethod("longTap", int.class, int.class); 
    longTap.setAccessible(true); 
    longTap.invoke(mInteractionController, x, y); 
} 

但是它不是滿意解,任何想法如何更好地做到這一點?他們爲什麼錯過這樣的方法?

+0

看看下面的鏈接 ? –

+0

請通過以下鏈接 '' –

回答

2

我認爲刷一個UiObject更好。

yourUiObject.swipeRight(int steps); 
yourUiObject.swipeLeft(int steps); 
yourUiObject.swipeDown(int steps); 
yourUiObject.swipeUp(int steps); 

他們中的任何人都對我很好。 請注意,文檔說一步需要約5ms,但我發現它不是真的。

+0

我沒有任何物體。我只想執行長時間點擊x,y – maszter

+0

這個刷卡電話的工作原理,當我嘗試在Android 4.3上。希望UiObject.longClick()實際上會長時間點擊 – tmin

5
getUiDevice().getInstance().swipe(x, y, x, y, 400); 

起點和終點相同。 然後你可以模擬uiDevice longclick。