Поддельный KeyEvent не работает * точно * как "настоящая" кнопка. Зачем? - PullRequest
5 голосов
/ 22 апреля 2011

Я пытаюсь вызвать onKeyDown () моей основной деятельности с помощью KEYCODE_BACK, чтобы он вел себя так, как будто я сам нажал кнопку «назад». Я делаю это, используя следующий код:

   KeyEvent goBackDown = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK,0,0);
    goBackDown.dispatch(activity);
    SystemClock.sleep(50);  // as if human pressed the key
    KeyEvent goBackUp = new KeyEvent(0,0,KeyEvent.ACTION_UP,KeyEvent.KEYCODE_BACK,0,0);
    goBackUp.dispatch(activity);

В данный момент onKeyDown () моей активности вызывает только:

return super.onKeyDown(keyCode, event);

Тем не менее, в отличие от кнопки real Back, когда вызывается «фальшивый» код, действие отказывается стать невидимым.

Почему?

Ответы [ 3 ]

11 голосов
/ 22 апреля 2011

использование

dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK));

http://developer.android.com/reference/android/view/View.html#dispatchKeyEvent%28android.view.KeyEvent%29

3 голосов
/ 15 февраля 2013

Метод Aleadam не работает на моем Android 4.1.2. Поэтому я пишу обходной путь:

public void dispachBackKey() {
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
2 голосов
/ 22 апреля 2011

Попробуйте использовать это

public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    {
        //....
    }
    return true;
}
...