技术控

    今日:129| 主题:49225
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] Android 实现点击两次BACK键退出应用

[复制链接]
哪葮凊 发表于 2016-10-2 08:55:44
134 0

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
思路:Android中捕获用户按键是在onKeyDown方法中,只需要判断用户按键是否是KEYCODE_BACK即后退键即可,剩下的即为判断两次点击BACK键时间间隔问题了
  第一种实现方式
  1. package com.example.clickexittest;  

  2.     import android.app.Activity;  
  3.     import android.os.Bundle;  
  4.     import android.os.Handler;  
  5.     import android.os.Message;  
  6.     import android.util.Log;  
  7.     import android.view.KeyEvent;  
  8.     import android.widget.Toast;  

  9.     public class MainActivity extends Activity {  

  10.         private static final String TAG = MainActivity_Exit.class.getSimpleName();  

  11.         // 定义一个变量,来标识是否退出  
  12.         private static boolean isExit = false;  

  13.         private static Handler mHandler = new Handler() {  

  14.             @Override  
  15.             public void handleMessage(Message msg) {  
  16.                 super.handleMessage(msg);  
  17.                 isExit = false;  
  18.             }  
  19.         };  

  20.         @Override  
  21.         protected void onCreate(Bundle savedInstanceState) {  
  22.             super.onCreate(savedInstanceState);  
  23.             setContentView(R.layout.activity_main);  

  24.         }  

  25.         @Override  
  26.         public boolean onKeyDown(int keyCode, KeyEvent event) {  
  27.             if (keyCode == KeyEvent.KEYCODE_BACK) {  
  28.                 exit();  
  29.                 return true;  
  30.             }  
  31.             return super.onKeyDown(keyCode, event);  
  32.         }  

  33.         private void exit() {  
  34.             if (!isExit) {  
  35.                 isExit = true;  
  36.                 Toast.makeText(getApplicationContext(), "再按一次后退键退出程序",  
  37.                         Toast.LENGTH_SHORT).show();  
  38.                 // 利用handler延迟发送更改状态信息  
  39.                 mHandler.sendEmptyMessageDelayed(0, 2000);  
  40.             } else {  

  41.                 Log.e(TAG, "exit application");  

  42.                 this.finish();  
  43.             }  
  44.         }  
  45.     }
复制代码
在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在 Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为 true,则会执行退出的方法。
  第二种实现方式
  1. package com.example.clickexittest;  

  2.     import android.app.Activity;  
  3.     import android.os.Bundle;  
  4.     import android.util.Log;  
  5.     import android.view.KeyEvent;  
  6.     import android.widget.Toast;  

  7.     public class MainActivity extends Activity {  

  8.         private static final String TAG = MainActivity.class.getSimpleName();  

  9.         private long clickTime = 0; //记录第一次点击的时间  

  10.         @Override  
  11.         protected void onCreate(Bundle savedInstanceState) {  
  12.             super.onCreate(savedInstanceState);  
  13.             setContentView(R.layout.activity_main);  

  14.         }  

  15.         @Override  
  16.         public boolean onKeyDown(int keyCode, KeyEvent event) {  
  17.             if (keyCode == KeyEvent.KEYCODE_BACK) {  
  18.                 exit();  
  19.                 return true;  
  20.             }  
  21.             return super.onKeyDown(keyCode, event);  
  22.         }  

  23.         private void exit() {  
  24.             if ((System.currentTimeMillis() - clickTime) > 2000) {  
  25.                 Toast.makeText(getApplicationContext(), "再按一次后退键退出程序",  
  26.                         Toast.LENGTH_SHORT).show();  
  27.                 clickTime = System.currentTimeMillis();  
  28.             } else {  
  29.                 Log.e(TAG, "exit application");  
  30.                 this.finish();  
  31.     //          System.exit(0);  
  32.             }  
  33.         }  
  34.     }
复制代码
判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。
友荐云推荐




上一篇:Accountability for What you Say is Dangerous and That’s Okay
下一篇:Daniel Cazzulino's Blog: Leveraging Azure Functions for MIT AppInventor Web
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表