I am trying to invoke my main activity's onKeyDown() with KEYCODE_BACK, so that it behaves as if I pressed the 'back' button myself. I do that using the following code:
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);
开发者_Go百科
My activity's onKeyDown() currently only calls:
return super.onKeyDown(keyCode, event);
Yet, unlike the real Back button, when the "fake" code is called, the activity refuses to become invisible.
Why?
use
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK));
http://developer.android.com/reference/android/view/View.html#dispatchKeyEvent%28android.view.KeyEvent%29
Aleadam method don't work on my android 4.1.2. So I write workaround:
public void dispachBackKey() {
dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
Try using this
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
//....
}
return true;
}
精彩评论