Android Phone WindowManager 감청 화면 오른쪽 에서 왼쪽으로 미 끄 러 지 며 되 돌아 오 는 기능

프로젝트 에 리 턴 키 가 설계 되 어 있 지 않 기 때문에 다른 프로그램 에 들 어가 면 데스크 톱 으로 돌아 갈 수 없습니다.인 풋 키 이벤트 4(리 턴 키)를 직렬 로 입력 해서 데스크 톱 으로 돌아 갈 수 있 습 니 다.디 버 깅 을 편리 하 게 하기 위해 프레임 워 크 에서 제스처 를 감청 하여 리 턴 기능 을 수행 합 니 다.
       frameworks\\base\services\\core\java\com\android\\server\policy\\Phone Window Manager 에 이러한 코드 가 있 습 니 다.

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 Phone Window Manager 감청 화면 오른쪽 에서 왼쪽으로 미 끄 러 지 며 되 돌아 오 는 기능 을 수행 하 는 글 을 소개 합 니 다.더 많은 Android Phone Window Manager 감청 화면 오른쪽 에서 왼쪽으로 미 끄 러 지 며 되 돌아 오 는 기능 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기