基础_ _返回键back

 

============ 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();

    }

}

posted on 2016-04-22 15:37  左手指月  阅读(852)  评论(0编辑  收藏  举报