1. 程式人生 > 程式設計 >Android PhoneWindowManager監聽螢幕右側向左滑動實現返回功能

Android PhoneWindowManager監聽螢幕右側向左滑動實現返回功能

由於專案沒有設計返回鍵,一旦進入別的應用,就無法回到桌面。只能通過串列埠輸入input keyevent 4(返回鍵)來返回桌面,為了方便除錯,在Framework 中監聽手勢,實現返回功能。

在frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager中有這麼一段程式碼

mSystemGestures = new SystemGesturesPointerEventListener(context,new SystemGesturesPointerEventListener.Callbacks() {
          @Override
          public void onSwipeFromTop() {
   Log.i("gyx","onSwipeFromTop");
            if (mStatusBar != null) {
              requestTransientBars(mStatusBar);
            }
          }
          @Override
          public void onSwipeFromBottom() {
   Log.i("gyx","onSwipeFromBottom");
            if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_BOTTOM) {
              requestTransientBars(mNavigationBar);
            }
          }
          @Override
          public void onSwipeFromRight() {
   Log.i("gyx","onSwipeFromRight");
   sendKeyCode(4);
   Log.i("gyx","sendKeyCode 4");
 
            if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_RIGHT) {
              requestTransientBars(mNavigationBar);
            }
          }
          @Override
          public void onSwipeFromLeft() {
   Log.i("gyx","onSwipeFromLeft");
            if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_LEFT) {
              requestTransientBars(mNavigationBar);
            }
          }
          @Override
          public void onFling(int duration) {
            if (mPowerManagerInternal != null) {
              mPowerManagerInternal.powerHint(
                  PowerHint.INTERACTION,duration);
            }
          }
          @Override
          public void onDebug() {
            // no-op
          }
          @Override
          public void onDown() {
            mOrientationListener.onTouchStart();
          }
          @Override
          public void onUpOrCancel() {
            mOrientationListener.onTouchEnd();
          }
          @Override
          public void onMouseHoverAtTop() {
            mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
            Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS);
            msg.arg1 = MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS;
            mHandler.sendMessageDelayed(msg,500);
          }
          @Override
          public void onMouseHoverAtBottom() {
            mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
            Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS);
            msg.arg1 = MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION;
            mHandler.sendMessageDelayed(msg,500);
          }
          @Override
          public void onMouseLeaveFromEdge() {
            mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
          }
        });

程式碼中監聽了手勢操作,其中onSwipeFromRight()就是當從螢幕的右側向左滑動時會觸發,只要在這裡加入返回的功能即可;

實現返回按鍵的功能程式碼如下

private void sendKeyCode(final int keyCode) {
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          // 建立一個Instrumentation物件
          Instrumentation inst = new Instrumentation();
          // 呼叫inst物件的按鍵模擬方法
          inst.sendKeyDownUpSync(keyCode);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }).start();
  }

總結

到此這篇關於Android PhoneWindowManager監聽螢幕右側向左滑動實現返回功能的文章就介紹到這了,更多相關Android PhoneWindowManager監聽螢幕右側向左滑動實現返回功能內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!