Android中模擬HOME鍵功能

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

  代碼如下:

 

[java] public boolean onKeyDown(int keyCode, KeyEvent event) { 
        if(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); 

public boolean onKeyDown(int keyCode, KeyEvent event) {
  if(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屬性相同的棧中。

 

摘自 北京大學-Google Android實驗室

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *