3 Stimmen

Wie sendet man einen langen Druck aus einem InstrumentationTestCase?

Wie kann ich in Android einen langen Druck von einem InstrumentationTestCase ? Ich würde zum Beispiel gerne eine sendKeys(KEYCODE_DPAD_CENTER) aber machen Sie daraus einen langen Klick.

2voto

JRL Punkte 74309

Ich weiß nicht, ob dies der einzige/richtige Weg ist, aber ich habe es auf diese Weise gemacht:

public void longClickDpadCenter() throws Exception {
    getInstrumentation().sendKeySync(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER));
    Thread.sleep(ViewConfiguration.get(mContext).getLongPressTimeout());
    getInstrumentation().sendKeySync(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER));
}

0voto

BoredT Punkte 1590

Versuchen Sie es mit der nachstehenden Hilfsmethode:

private void longPress(int key) {
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis();
    KeyEvent event1 = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_DOWN, key, 0);
    KeyEvent event2 = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_DOWN, key, 1);
    getInstrumentation().sendKeySync(event1);
    getInstrumentation().sendKeySync(event2);
}

Und ein Beispiel für die Verwendung:

longPress(KeyEvent.KEYCODE_ENTER);

0voto

jintao wu Punkte 21

Zeile 179 in der Android-Quellcode :

class InputKeyEvent implements InputCmd {
    @Override
    public void run(int inputSource, int displayId) {
        String arg = nextArgRequired();
        final boolean longpress = "--longpress".equals(arg);
        if (longpress) {
            arg = nextArgRequired();
        }

        do {
            final int keycode = KeyEvent.keyCodeFromString(arg);
            sendKeyEvent(inputSource, keycode, longpress, displayId);
        } while ((arg = nextArg()) != null);
    }

    private void sendKeyEvent(int inputSource, int keyCode, boolean longpress, int displayId) {
        final long now = SystemClock.uptimeMillis();
        int repeatCount = 0;

        KeyEvent event = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, repeatCount,
                0 /*metaState*/, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /*scancode*/, 0 /*flags*/,
                inputSource);
        event.setDisplayId(displayId);

        injectKeyEvent(event);
        if (longpress) {
            repeatCount++;
            injectKeyEvent(KeyEvent.changeTimeRepeat(event, now, repeatCount,
                    KeyEvent.FLAG_LONG_PRESS));
        }
        injectKeyEvent(KeyEvent.changeAction(event, KeyEvent.ACTION_UP));
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X