在2.x系列中,home键盘监听很简单
1.禁止原始home键处理
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>2.重写处理事件
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (KeyEvent.KEYCODE_HOME == keyCode) { /* android.os.Process.killProcess(android.os.Process.myPid()); */ // 关闭程序或做其他操作. } return super.onKeyDown(keyCode, event); } @Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
1.注册广播接收器
final IntentFilter homeFilter = new IntentFilter( Intent.ACTION_CLOSE_SYSTEM_DIALOGS); registerReceiver(homePressReceiver, homeFilter);2.实现监听
private final BroadcastReceiver homePressReceiver = new BroadcastReceiver() { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) { Log.i(TAG, "you click home key!"); myDestroy(); finish(); } } } };
unregisterReceiver(homePressReceiver);
电源监听相对更为简单些
只需要监听两个action即可:
Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON
1.添加权限
<uses-permission android:name="android.permission.WAKE_LOCK" />2.注册广播接收器
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(mBatInfoReceiver, filter);3.实现代码
private final BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { final String action = intent.getAction(); if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 退出程序... } } };4.取消广播注册
unregisterReceiver(mBatInfoReceiver);