zoukankan      html  css  js  c++  java
  • 仿UC点击两次返回键退出程序

    应用场景:点击两次Back键退出程序

    效果图:

    实现原理:onKeyDown()会捕获当前点击事件,如果当前keyCode等于BACK事件值就会执行exit()方法。在exit()方法中,首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在3000毫秒(3秒)后发出一个消息,在Handler中接收到消息后将isExit值还原成false。如果在发送消息间隔的3秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为true,则会执行退出程序的方法。

    实现步骤:

    1、定义一个boolean型的变量,默认值为false

        private boolean isExit = false;

    2、覆写ActivityonKeyDown()方法

    复制代码
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if (keyCode == KeyEvent.KEYCODE_BACK)// 当keyCode等于退出事件值时
            {
                exit();
                return false;
            }
            else
            {
                return super.onKeyDown(keyCode, event);
            }
        }
    复制代码

    3、封装exit()方法

    复制代码
        private void exit()
        {
            if (isExit)
            {
                // ACTION_MAIN with category CATEGORY_HOME 启动主屏幕
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.addCategory(Intent.CATEGORY_HOME);
                startActivity(intent);
                System.exit(0);// 使虚拟机停止运行并退出程序
            }
            else
            {
                isExit = true;
                Toast.makeText(TwoTimesBackActivity.this, "再按一次退出", Toast.LENGTH_SHORT).show();
                mHandler.sendEmptyMessageDelayed(0, 3000);// 3秒后发送消息
            }
        }
    复制代码

    4、创建Handler对象,用来处理消息

    复制代码
        Handler mHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)//处理消息
            {
                super.handleMessage(msg);
                isExit = false;
            }
        };
    复制代码

    代码如下:

    复制代码
    public class TwoTimesBackActivity extends Activity
    {
        private boolean isExit = false;
        
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
        
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if (keyCode == KeyEvent.KEYCODE_BACK)// 当keyCode等于退出事件值时
            {
                exit();
                return false;
            }
            else
            {
                return super.onKeyDown(keyCode, event);
            }
        }
        
        private void exit()
        {
            if (isExit)
            {
                // ACTION_MAIN with category CATEGORY_HOME 启动主屏幕
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.addCategory(Intent.CATEGORY_HOME);
                startActivity(intent);
                System.exit(0);// 使虚拟机停止运行并退出程序
            }
            else
            {
                isExit = true;
                Toast.makeText(TwoTimesBackActivity.this, "再按一次退出", Toast.LENGTH_SHORT).show();
                mHandler.sendEmptyMessageDelayed(0, 3000);// 3秒后发送消息
            }
        }
        
        Handler mHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)//处理消息
            {
                super.handleMessage(msg);
                isExit = false;
            }
        };
    }
    复制代码
  • 相关阅读:
    nRF5 SDK for Mesh(二) Getting started 快速开始
    QT 简单 TCP 通信,发送数据到服务器
    Bluetooth® Low Energy Beacons
    CC2540 低功耗串口, POWER_SAVING 模式 下 串口 0 的使用
    LWIP network interface 网卡 初始化 以 STM32 为例子 后面会有 用 2G 或者4G 模块 用 PPP拨号的 形式 虚拟出网卡 所以先以 这个为 前提
    R 语言入门
    Django 框架
    Windows 下 Django 安装
    windows 下搭建 git 服务器 copssh+git
    python Pystaller 将python文件打包成exe
  • 原文地址:https://www.cnblogs.com/zhaolizhe/p/6924042.html
Copyright © 2011-2022 走看看