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);      
    }

如果大家覺得哪裏不對的話,可以反映一下,大家一起學習;

轉載請註明出處!

發佈了33 篇原創文章 · 獲贊 95 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章