android home鍵帶來的問題


問題1:監聽home鍵
第一種方式:android 對home鍵的監聽,加上了權限,必須取得對處理home鍵事件的權限,才能對home鍵進行操作,
只對2.2及以前的系統有效。
     1,加上權限
      <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
     就是讓鍵盤守衛失去能了,根據英文大體是這個意思
     2,重載以下兩個方法@Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      if(KeyEvent.KEYCODE_HOME==keyCode){
        //寫要執行的動作或者任務
        
      }
      return super.onKeyDown(keyCode, event);
  }
  @Override
  public void onAttachedToWindow(){
      this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
      super.onAttachedToWindow();
  }
第二種方式:通過廣播方式監聽
   class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {
        static final String SYSTEM_REASON = "reason";
        static final String SYSTEM_HOME_KEY = "homekey";//home key
        static final String SYSTEM_RECENT_APPS = "recentapps";//long home key
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                String reason = intent.getStringExtra(SYSTEM_REASON);
                if (reason != null) {
                    if (reason.equals(SYSTEM_HOME_KEY)) {
//                     System.out.println("***************home key處理點 ***************");
                        // home key處理點
                     DemoApplication.Home_key=true;
//                     showNotification();
                    } else if (reason.equals(SYSTEM_RECENT_APPS)) {
                        // long home key處理點
                    }
                }
            }
        }
   }
   註冊廣播
   HomeKeyEventBroadCastReceiver receiver = new HomeKeyEventBroadCastReceiver();
   registerReceiver(receiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

問題2:安裝系統SD卡里面的apk或者原有的程序更新版本的時候,會遇到升級安裝成功之後的一個選擇——“打開”和“完成”,點擊完成沒有問題,但是,如果點擊了"打開",然後按Home鍵,從應用程序列表裏面選擇應用程序圖標進入,這個時候就會重新啓動了一個應用程序,退出之後就正常了。
解決方案:監聽home鍵,當home後設全局變量DemoApplication.Home_key=true;然後啓動應用的時候判斷DemoApplication.Home_key
  if(DemoApplication.Home_key){//home鍵後點擊應用入口
 finish();
  }else{
 //正常啓動入口
  }
或者在程序入口的activity中檢測該activity是不是程序的root Activity。如果不是就可以直接finish此activity,程序會從棧中還原以前的狀態。
具體代碼如下:
在應用啓動的activity的Oncreate方法中添加如下代碼即可:
 if (!isTaskRoot()) {
     // Android launched another instance of the root activity into an existing task
     //  so just quietly finish and go away, dropping the user back into the activity
     //  at the top of the stack (ie: the last state of this task)
     finish();
     return;
 }else{
 }
問題3:返回鍵模擬home鍵,
Intent intent2 = new Intent();
intent2.setAction(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_HOME);
startActivity(intent2);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章