在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();
}
在4.x系列版本中,home键监听需要通过接收系统广播来实现
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();
}
}
}
};
3.onDestory的时候记得取消监听
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);