Android 如何在自己的應用中類比Home鍵

來源:互聯網
上載者:User

  今天在做一個應用的時候要用到類似於QQ按返回鍵並不銷毀Activity的方法(即不調用Activity.finish(),系統不調用onDestroy),而是類似於按Home鍵,讓Activity類似於“暫停”(即只調用onPause,onDestroy)。

  最開始想到的便是Override onKeyDown 這個方法,但經過調試,發現這個在按下Home鍵時,系統是不會發送訊息到這裡處理的,也就是說類比KEYCODE_HOME 是沒有效果的,之後又在網上查到 dispatchKeyEvent 這個函數,以下是函數說明:

Called to process key events. You can override this to intercept all key events before they are dispatched to the window. Be sure to call this implementation for key events that should be handled normally.

  但令人沮喪的是,Home 按鈕所產生的訊息依然不經過這裡,似乎Home按鈕所產生的訊息是由系統處理的。於是想到從其他方面入手,最後找到了以下的方法:

  

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif(keyCode == KeyEvent.KEYCODE_BACK){Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 注意intent.addCategory(Intent.CATEGORY_HOME);this.startActivity(intent);return true;}return super.onKeyDown(keyCode, event);}

  特別注意 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 這句,一定要加上,因為Activity 的 launchMode 預設是以 standard 執行的,如果不添加這個標記則 會建立新的Activity 並放在與當前Activity相同的Task中。以下是 FLAG_ACTIVITY_NEW_TASK 的說明

FLAG_ACTIVITY_NEW_TASK標記

當傳遞給startActivity()的Intent對象包含FLAG_ACTIVITY_NEW_TASK標記時,系統會為需要啟動的activity尋找與當前activity不同的task。如果要啟動的activity的affinity屬性與當前所有的task的affinity屬性都不相同,系統會建立一個帶那個affinity屬性的task,並將要啟動的activity壓到建立的task棧中;否則將activity壓入那個affinity屬性相同的棧中。

更多Affinities和Task知識,參見 (轉載)Android下Affinities和Task

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.