一 .覆盖 dispatchKeyEvent
dispatchKeyEvent(KeyEvent e) 返回值为 true则点击“返回” 按键的时候不销毁当前Activity。可以进行其他操作
public boolean dispatchKeyEvent(KeyEvent e) { if (e.getKeyCode() == KeyEvent.KEYCODE_BACK && e.getAction() == KeyEvent.ACTION_UP) { this.onClick(null); } return true; }public void onClick(View v) { if (isok != 1) { // Toast.makeText(this, "正在取消 ...", Toast.LENGTH_SHORT).show(); SynDataProgressAct.getdefault().tmer.cancel(); sync.getdefault().SetCancle(); this.sendMessage(2, sync.getdefault().STRING_C_CANCELING); } else { this.finish(); } }
二 覆盖onKeyDown
在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK )就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果。
我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy() 里强制退出应用,或直接杀死进程,具体操作代码如下:
//捕获按下键盘上返回按钮
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { new AlertDialog.Builder(this) // .setIcon(R.drawable.services) .setTitle(R.string.prompt) .setMessage(R.string.quit_msg) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { finish(); } }).show(); return true; } else { return super.onKeyDown(keyCode, event); } } //彻底退出程序 @Override protected void onDestroy() { super.onDestroy(); System.exit(0); // 或者下面这种方式 // android.os.Process.killProcess(android.os.Process.myPid()); }
1 楼 bingtao115 2011-10-25
大哥你的捕捉home key方法在哪呢?