Android 如何监听物理键Back,弹出一个Toast提示框或对话框

一、监听back键,退出时弹出一个对话框,在Activity中重写 onKeyDown方法,代码如下:

@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			// 创建退出对话框
			AlertDialog alertDialog = new AlertDialog.Builder(this).create();
			// 设置对话框标题
			alertDialog.setTitle("系统提示:");
			// 设置对话框消息
			alertDialog.setMessage("亲你确定要退出该应用吗?");
			// 添加选择按钮并注册监听
			alertDialog.setButton("确定", listener);
			alertDialog.setButton2("取消", listener);
			// 显示对话框
			alertDialog.show();

		}
		return false;
	}

	/** 监听对话框里面的button点击事件 */
	DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
		public void onClick(DialogInterface dialog, int which) {
			switch (which) {
			// "确认"按钮退出程序
			case AlertDialog.BUTTON_POSITIVE:
				finish();
				break;
			// "取消"第二个按钮取消对话框
			case AlertDialog.BUTTON_NEGATIVE:
				break;
			default:
				break;
			}
		}
	};

二、监听back键,当慢点击back键时弹出一个Toast提示框,连续两次快点击back键时直接退出该应用,两种实现方式如下:

##2.1 重写onBackPressed() 方法:

	@Override
    public void onBackPressed() {
        if (System.currentTimeMillis() - mPreBackTime < DOUBLE_CLICK_TIME_SUB) {
            finish();
        } else {
            Toast.makeText(MainActivity.this, "再按一次返回键退出手机淘宝", Toast.LENGTH_SHORT).show();
            mPreBackTime = System.currentTimeMillis();
        }
    }

##2.2 重写onKeyDown( ) 方法:

//连续两次按back键的指定时长差值
private static final int DOUBLE_CLICK_TIME_SUB = 1000;
//前一次按back键的时间
private long mPreBackTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
            if (System.currentTimeMillis() - mPreBackTime < DOUBLE_CLICK_TIME_SUB) {
                super.onKeyDown(keyCode, event);
            } else {
                Toast.makeText(MainActivity.this, "再按一次返回键退出手机淘宝", Toast.LENGTH_SHORT).show();
                mPreBackTime = System.currentTimeMillis();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值