Android Home鍵監(jiān)聽
Android 普通鍵值可以直接在dispatchKeyEvent()中處理色徘,但Home鍵,比較特殊,需要單獨(dú)監(jiān)聽其廣播朗恳,且必須為動態(tài)廣播湿颅,其靜態(tài)廣播無效载绿;
需求:Home鍵粥诫,設(shè)置 Kill 自己,但設(shè)置中有多個Activity崭庸,在每個Activiy 中年監(jiān)聽Home鍵廣播不現(xiàn)實(shí)怀浆,必須把監(jiān)聽廣播抽取出來在同一個類中實(shí)現(xiàn),考慮到BaseActivity怕享;
public class BaseActivity extends Activity {
private HomeWatcherReceiver mHomeWatcherReceiver = null;
private boolean isNeedFinish = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerReceiver();
}
public void setBackFinish(boolean flag) {
isNeedFinish = flag;
}
private void registerReceiver() {
mHomeWatcherReceiver = new HomeWatcherReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
registerReceiver(mHomeWatcherReceiver, filter);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int KeyCode = event.getKeyCode();
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
this.finish();
System.gc();
return true;
}
}
return super.dispatchKeyEvent(event);
}
public class HomeWatcherReceiver extends BroadcastReceiver {
private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
Log.i(MyAPP, "intentAction =" + intentAction);
if (TextUtils.equals(intentAction, Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
Log.i(MyAPP, "reason =" + reason);
if (TextUtils.equals(SYSTEM_DIALOG_REASON_HOME_KEY, reason)) {
BaseActivity.this.finish();
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mHomeWatcherReceiver != null) {
try {
unregisterReceiver(mHomeWatcherReceiver);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}