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();            }        }    }}

更多相关文章

  1. 区分android:gravity与android:layout_gravity
  2. android:layout_gravity和android:gravity属性的差别
  3. android标题栏的选择与使用,AppCompatActivity!
  4. 独家教程:用PHP编写Android应用程序
  5. android style(样式)和theme(主题)设置
  6. Android(安卓)解决自定义 CheckBox 样式时的背景显示异常问题
  7. 用PHP编写Android应用程序
  8. shape的使用总结
  9. android中控制EditText不可编辑的问题

随机推荐

  1. 下载Android(安卓)source 问题
  2. Android(安卓)SimpleAdapter显示问题
  3. ubuntu android sdk环境搭建
  4. 菜鸟也能解决android中的OOM问题
  5. android studio使用中碰到Failure [INSTA
  6. ListView为什么要使用convertView和ViewH
  7. Android(安卓)消息机制学习
  8. Android(安卓)设置Dialog不允许返回或搜
  9. android 蓝牙隐藏对话框 后台配对
  10. Android实现定时执行某个任务