物理按键
物理按键的三种状态
- onKeyDown:按下物理按键
- onKeyUp:松开物理按键
- onKeyLongPress:长按
物理按键所对应的常量
上述监听第三个监听状态的方法,是通用的基于回调的事件处理,也就是所有物理按键的按下和松开都会触发上述的onKeyDown和onKeyUp方法
安卓系统中提供了对应的常量来区分不同的物理按键
- 音量上、下:KEYCODE_VOLUME_UP、KEYCODE_VOLUME_DOWN
- 电源键:KEYCODE_POWER
- 返回键:KEYCODE_BACK
- 主屏键:KEYCODE_HOME
- 菜单键:KEYCODE_MENU
实例
1、需求:实现点击两次返回键退出程序
2、MainActivity.java
package com.example.study2;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
public Long exitTime = 0L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 按键监听
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
exit();
// 返回true,停止默认行为,例如返回键默认行为就是返回上一层,如果是主页面,那么按返回键就是退出程序
return true;
}
return super.onKeyDown(keyCode, event);
}
public void exit(){
// 在1秒内再一次按返回键就退出程序
if(System.currentTimeMillis() - exitTime > 1000){
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
}else{
// 退出当前Activity
finish();
// 程序正常退出
System.exit(0);
}
}
}