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(安卓)MPAndroidChart--使用柱状图
  2. Android(安卓)TextView 属性设置
  3. Android之TextView属性详解
  4. Android——界面布局
  5. Android之TextView属性列表
  6. 你还在问android横竖屏切换的生命周期?
  7. TextView属性大全+单行显示长文本
  8. Settings: android 组件如何响应语言变化
  9. android绘图

随机推荐

  1. 无法在phpmyadmin中打开一些表
  2. PHP联系表格给用户发送随机确认号码
  3. 谈谈php里的DAO Model AR
  4. PHP:如何通过sprintf()添加前导零/零填充浮
  5. 如果不使用OAuth - PHP库,如何使用OAuth和
  6. 提交动态复选框表单并成对获取值
  7. It saves without an error, but it stil
  8. 单引号,双引号,javascript,HTML,转义字符
  9. PHP 网站模板核心类
  10. 如何在php数组中获取php键值