
用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态。定时器是每次用户按下返回键才去创建。
二、功能代码:
?
/**
* 菜单、返回键响应
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
exitBy2Click()//调用双击退出函数
}
return false
}
/**
* 双击退出函数
*/
private static Boolean isExit = false
private void exitBy2Click() {
Timer tExit = null
if (isExit == false) {
isExit = true// 准备退出
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show()
tExit = new Timer()
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit = false// 取消退出
}
}, 2000)// 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
} else {
finish()
System.exit(0)
}
}
需要使用BroadcastReceiver 广播接收者,注册HOME广播。
创建广播接收者
public class HomeReceiver extends BroadcastReceiver {
public void onReceive(Context context,Intent intent){
}
}
2.注册广播
<receiver android:name="com.xxx.xxx.HomeReceiver" >
<intent-filter>
<action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
</intent-filter>
</receiver>
3.退出程序
int pid = android.os.Process.myPid() //获取当前应用程序的PID
android.os.Process.killProcess(pid) //结束当前进程
原理就是计算两次按下的时间间隔,数值你可以自己设定,间隔小于定的数值则认为是连续按下的两次,此时退出private long mExitTime
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - mExitTime) >800) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show()
mExitTime = System.currentTimeMillis()
} else {
finish()
}
return true
}
return super.onKeyDown(keyCode, event)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)