============ 2, android中的back键处理

很多网友不明白,如何在Android平台上捕获Back键的事件。

Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件。

1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规方法,直接重写Activity的onKeyDown方法即可,代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复
       Toast.makeText(ml78.this,"魔力去吧Back键测试",1).show();
        return true;
    }

return super.onKeyDown(keyCode, event);
}

2、重写onBackPressed方法

而对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed方法即可,代码如下

@Override
public void onBackPressed() {
// 这里处理逻辑代码,大家注意:该方法仅适用于2.0或更新版的sdk
return;
}

此外,关于Android home键和back键区别

back键
Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来,销毁当前Activity。当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有Activity都弹出结束后,应用也就随之结束了.如果说程序中存在service之类的,则可以在恰当的位置监听处理下也就可以了.

home键
Android程序的隐藏,当你按下手机的Home键的时候,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被隐藏起来,当你再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入,会直接显示程序栈中最上层的Activity.

back键默认把当前Activity给finish,home键只是把Activity给onStop.

实现按Home键时隐藏程序的效果:
1:Android 2.0之前需要监听按键事件,进行判断是不是按下了back键
2:Android 2.0之后系统提供了一个onBackPressed()方法,这个方法就是专门用来监听back键事件的,所以只需重写onBackPressed()方法即可

@Override
public void onBackPressed() { 
    //实现Home键效果 
    //super.onBackPressed();这句话一定要注掉,不然又去调用默认的back处理方式了 
    Intent i= new Intent(Intent.ACTION_MAIN); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addCategory(Intent.CATEGORY_HOME); 
    startActivity(i);  
}

退出应用程序的实现:可以自己写个方法,例如:

public void exitProgrames(){ 
    Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(startMain); 
    android.os.Process.killProcess(android.os.Process.myPid()); 
}
注意:需要添加权限:

=============== 1, Android中OnkeyDown事件和OnBackPressed方法区别、兼容、使用

在Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件。

1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规方法,直接重写Activity的onKeyDown方法即可,代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复
       Toast.makeText(ml78.this,"返回键Back键测试",1).show();
        return true;
    }

return super.onKeyDown(keyCode, event);
}

而对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed方法即可,代码如下

@Override
public void onBackPressed() {
  // 这里处理逻辑代码,大家注意:该方法仅适用于2.0或更新版的sdk
return;
}

同时还有一种情况,就是在以前开发的程序中使用的是onKeyDown方法,但是后续版本为了兼容OnBackPressed方法。就需要两者之间进行嵌套。具体的方法如下:

@Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
   // 是否触发按键为back键
  if (keyCode == KeyEvent.KEYCODE_BACK) {
   onBackPressed();
   return true;
   } else {// 如果不是back键正常响应
   return super.onKeyDown(keyCode, event);
   }
  }

利用时间差方法完成两次返回键退出,防止误操作。

// 退出时间

private long currentBackPressedTime = 0;

// 退出间隔

private static finalint BACK_PRESSED_INTERVAL = 2000;

//重写onBackPressed()方法,继承自退出的方法

@Override

publicvoid onBackPressed() {

// 判断时间间隔

if (System.currentTimeMillis()- currentBackPressedTime > BACK_PRESSED_INTERVAL) {

currentBackPressedTime = System.currentTimeMillis();

Toast.makeText(this, "再按一次返回键退出程序", Toast.LENGTH_SHORT).show();

else {

// 退出

finish();

}

}

基础_ _返回键back的更多相关文章

  1. PhoneGap API 之事件处理_双击返回键退出程序

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

  3. C#_02.16_基础七_.NET表达式&运算符

    C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...

  4. C#_02.15_基础六_.NET类

    C#_02.15_基础六_.NET类 一.类继承是一个类在另一个类的基础上进行的扩展. 继承的子类拥有父类的全部成员.索引子类拥有本身的全部成员以及父类的全部成员. 可以对基类成员进行隐藏,如果必须的 ...

  5. C#_02.14_基础五_.NET类

    C#_02.14_基础五_.NET类 一.类实例: 我们前面说过类是一个模板,我们通过类创建一个又一个的实例,通常情况下类当中的变量是每一个实例都各有一份的,互相不影响,而静态字段是除外的,静态字段是 ...

  6. C#_02.13_基础四_.NET方法

    C#_02.13_基础四_.NET方法 一.方法概述: 方法是一块具有名称的代码.可以通过方法进行调用而在别的地方执行,也可以把数据传入方法并接受数据输出. 二.方法的结构: 方法头  AND  方法 ...

  7. MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64、MySQL5.7)

    MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64.MySQL5.7) 安装包版本 1)     VMawre-workstation版本包 地址: https://m ...

  8. Linux基础环境_安装配置教程(CentOS7.2 64、JDK1.8、Tomcat8)

    Linux基础环境_安装配置教程 (CentOS7.2 64.JDK1.8.Tomcat8) 安装包版本 1)     VMawre-workstation版本包 地址: https://my.vmw ...

  9. 传智博客2015年最新版iOS基础视频_最适合初学者入门

    视频介绍: 本视频是iOS学院精心录制的免费精华版iOS语言基础视频,该视频特点在于最大程度保证了知识点的完整性,按知识点进行视频录制,每个视频控制在20分钟左右,不会使学生产生疲劳,授课讲究通俗易懂 ...

随机推荐

  1. mybitis学习的页面

    http://mybatis.github.io/mybatis-3/zh/configuration.html

  2. java中byte, int的转换

    最近在做些与编解码相关的事情,又遇到了byte和int的转换,看着那些关于反码.补码的说明依旧头疼,还是记下些实用的方法吧.int -> byte可以直接使用强制类型转换: byte b = ( ...

  3. WinRT知识积累1之读xml数据

    前述:这个知识是在Windows8.1或WP8.1中运用Linq to xml获取一个xml文件里的数据.(网上也很多类似的知识,可以借鉴参考) 平台:windows8.1 metro 或者WP8.1 ...

  4. 微信第三方 授权方账户信息 API文档错误

    获取授权方的账户信息 该API用于获取授权方的公众号基本信息,包括头像.昵称.帐号类型.认证类型.微信号.原始ID和二维码图片URL. 需要特别记录授权方的帐号类型,在消息及事件推送时,对于不具备客服 ...

  5. 获取su后执行的脚本的返回值

    错误的方式: # su - testuser -c "/tmp/test.sh; echo $?"Sun Microsystems Inc.   SunOS 5.10      G ...

  6. OpenSSL - 利用OpenSSL自签证书和CA颁发证书

    秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥. openssl genrsa -out private.key 1024/2038                     ( ...

  7. 从零开始学习Node.js例子六 EventEmitter发送和接收事件

    pulser.js /* EventEmitter发送和接收事件 HTTPServer和HTTPClient类,它们都继承自EventEmitter EventEmitter被定义在Node的事件(e ...

  8. GO RPC

    HTTP RPC SERVER CODE package main import ( "errors" "fmt" "net/http" & ...

  9. 官网服务质量检测脚本(源码来自《Python自动化运维实战》第二版刘天斯)

    脚本Python版本2.7 #!/usr/bin/python #-*- coding:utf-8 -*- import os,sys import time import sys import py ...

  10. Python 基礎 - 認識模塊

    什麼是模塊?簡單說就是別人寫好了一堆功能,封裝在一起. 模塊有分二種,一個是之前有提到的 標準庫,就是不需要透過額外的安裝就有的模塊 ,另一個叫 第三方庫,需要另外安裝才能使用的模塊 #!/usr/b ...