Android 监听Home键、Back键、多任务键最新解决方法

来源:互联网 发布:大学一个人知乎 编辑:程序博客网 时间:2024/06/10 19:05

前言:在开发中,我们经常会去监听系统的按键操作,最常用的就是监听Back键。有时会用到监听Home和多任务键,但是Android系统默认是不让代码监听的,所以我们就得想别的办法,这里写了通过广播监听日志log的demo。


package com.example.djmsh.client_homekey;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.KeyEvent;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //在setContentView之前添加,未添加的话home键监听无效,设置窗体属性        this.getWindow().setFlags(0x80000000, 0x80000000);        setContentView(R.layout.activity_main);        //创建广播        InnerRecevier innerReceiver = new InnerRecevier();        //动态注册广播        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);        //启动广播        registerReceiver(innerReceiver, intentFilter);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            Toast.makeText(MainActivity.this, "返回键无效", Toast.LENGTH_SHORT).show();            return true;//return true;拦截事件传递,从而屏蔽back键。        }        if (KeyEvent.KEYCODE_HOME == keyCode) {            Toast.makeText(getApplicationContext(), "HOME 键已被禁用...", Toast.LENGTH_SHORT).show();            return true;//同理        }        return super.onKeyDown(keyCode, event);    }        class InnerRecevier extends BroadcastReceiver {        final String SYSTEM_DIALOG_REASON_KEY = "reason";        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);                if (reason != null) {                    if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {                        Toast.makeText(MainActivity.this, "Home键被监听", Toast.LENGTH_SHORT).show();                    } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {                        Toast.makeText(MainActivity.this, "多任务键被监听", Toast.LENGTH_SHORT).show();                    }                }            }        }    }}

原创粉丝点击