zoukankan      html  css  js  c++  java
  • 【Android 进阶】Android Home 键监听

    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();
                }
            }
        }
    }
  • 相关阅读:
    echarts数据包坐标拾取工具
    JS 多个条件判断
    js 实现各浏览器全屏
    前端统计使用插件
    JS 随机排序算法
    js中布尔值为false的六种情况
    Mosaic
    单点登录
    JavaScript数据结构和算法
    一个普通函数的冷僻属性(length、caller、arguments、name、[[Scopes]]和[[FunctionLocation]])
  • 原文地址:https://www.cnblogs.com/kangweifeng/p/8184204.html
Copyright © 2011-2022 走看看