关于4.0版本后home和power键监听的事情

在2.x系列中,home键盘监听很简单

1.禁止原始home键处理

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
2.重写处理事件

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (KeyEvent.KEYCODE_HOME == keyCode) {
            /* android.os.Process.killProcess(android.os.Process.myPid()); */
            // 关闭程序或做其他操作.
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onAttachedToWindow() {
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }

在4.x系列版本中,home键监听需要通过接收系统广播来实现

1.注册广播接收器

final IntentFilter homeFilter = new IntentFilter(
                Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        registerReceiver(homePressReceiver, homeFilter);
2.实现监听

private final BroadcastReceiver homePressReceiver = new BroadcastReceiver() {
        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                if (reason != null
                        && reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                    Log.i(TAG, "you click home key!");
                    myDestroy();
                    finish();
                }
            }
        }
    };

3.onDestory的时候记得取消监听
unregisterReceiver(homePressReceiver);

====================================================================================================================================


电源监听相对更为简单些

只需要监听两个action即可:

Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON 

1.添加权限

<uses-permission android:name="android.permission.WAKE_LOCK" />
2.注册广播接收器
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mBatInfoReceiver, filter);
3.实现代码

   private final BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(final Context context, final Intent intent) {
            final String action = intent.getAction();
            if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                // 退出程序...
            }
        }
    };
4.取消广播注册

unregisterReceiver(mBatInfoReceiver);









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值