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实现录屏直播(二)需求才是硬道理之产品功能调研
  2. [置顶] 关于Android NDK中如何调用第三方静态库--live555
  3. 关于Android NDK中如何调用第三方静态库--live555
  4. Android静态,动态广播示例
  5. Android中的人脸检测(静态和动态)
  6. Android中的人脸检测(静态和动态)
  7. 【Android NDK 开发】Ubuntu 函数库交叉编译 ( Android 动态库交
  8. Android静态代码分析
  9. asp.net core实例教程之异常处理与静态文件教程

随机推荐

  1. android 接收锁屏广播
  2. android 文字或者图片生成.pdf文件
  3. android notification和notificationmana
  4. android file 记录
  5. android(7)(写数据权限)
  6. Android通过内容提供器获取相册中所有图
  7. 安卓中颜色种类
  8. Android studio 获取MD5和SHA1值
  9. android关于网络
  10. android 视频播放器