標籤:靜態 null tac end bool textutils 取出 比較 roi
Android Home鍵監聽
Android 普通索引值可以直接在dispatchKeyEvent()中處理,但Home鍵,比較特殊,需要單獨監聽其廣播,且必須為動態廣播,其靜態廣播無效;
需求:Home鍵,設定 Kill 自己,但設定中有多個Activity,在每個Activiy 中年監聽Home鍵廣播不現實,必須把監聽廣播抽取出來在同一個類中實現,考慮到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(); } } }}
【Android 進階】Android Home 鍵監聽