Android 屏蔽Back键,监听Home键

app进入的时候我们会看到一个闪屏页,这个闪屏页做起来很简单,但是闪屏页一般需要屏蔽返回键,去监听一下Home键,为什么需要这样考虑呢?我们先看代码吧。

SplashActivity

public class SplashActivity extends Activity {
    private Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        //充满屏幕
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_splash);
        //注册广播 
        registerReceiver(mHomeKeyEventReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));  
        new Thread(new Runnable() {
            @Override
            public void run() {
                handler.sendEmptyMessageDelayed(0x1, 2000);         
            }
        }).start();         
        handler=new Handler(){
            public void handleMessage(android.os.Message msg) {
                if(msg.what==0x1){
                    startActivity(new Intent(SplashActivity.this, MainActivity.class));
                    SplashActivity.this.finish();
                }

            };
        };

    }

看代码知道,我们new Thread()的时候会创建一个子线程,如果我们按下很快的返回键或者按下home键(没有超过2秒),这时候程序退出了,但是这个线程没有结束,还在执行。那么这时候会跳到MainActiivty,如果用户看到了此情况,会不会很纳闷呢?怎么解决这个问题?一般做闪屏页的话,我们需要屏蔽返回键,监听一下Home键;

   //屏蔽返回键
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  
    {
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            return true;
        }
        return false;
    }

KeyEvent.KEYCODE_HOME这个方法压根不管用,监听不到Home键。我们 监听Home键的时候,需要注册一个广播监听是否按下Home键;

监听Home键:

private final BroadcastReceiver mHomeKeyEventReceiver  = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            //Intent.ACTION_CLOSE_SYSTEM_DIALOGS判断是否为home键
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
               //退出程序,释放资源
                System.exit(0);  
            }
        }
    };

//当程序销毁的时候,注销这个广播

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(mHomeKeyEventReceiver);      
    }

如果大家觉得哪里不对的话,可以反映一下,大家一起学习;

转载请注明出处!

你可能感兴趣的:(Android 屏蔽Back键,监听Home键)