Android PhoneWindowManager监听屏幕右侧向左滑动实现返回功能

所属分类: 软件编程 / Android 阅读数: 49
收藏 0 赞 0 分享

由于项目没有设计返回键,一旦进入别的应用,就无法回到桌面。只能通过串口输入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 自定义球型水波纹带圆弧进度效果(实例代码)

最近小编接到一个这样的需求,需要实现一个圆形水波纹,带进度,两层水波纹需要渐变显示,且外围有一个圆弧进度。今天小编给大家分享实例代码,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Flutter 实现下拉刷新上拉加载的示例代码

这篇文章主要介绍了Flutter 实现下拉刷新上拉加载的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Windows实现Flutter环境搭建及配置这一篇就够了

这篇文章主要介绍了Windows实现Flutter环境搭建及配置这一篇就够了,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android利用碎片fragment实现底部标题栏(Github模板开源)

Fragment可以作为Activity的组成部分,一个Activity可以有多个Fragment,这篇文章主要介绍了Android利用碎片fragment实现底部标题栏(Github模板开源),需要的朋友可以参考下
收藏 0 赞 0 分享

android studio 的下拉菜单Spinner使用详解

这篇文章主要介绍了android studio 的下拉菜单Spinner使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

解析Android 8.1平台SystemUI 导航栏加载流程

这篇文章主要介绍了Android 8.1平台SystemUI 导航栏加载流程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信录音功能

这篇文章主要为大家详细介绍了Android仿微信录音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿微信键盘切换效果

这篇文章主要为大家详细介绍了Android仿微信键盘切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android超清晰6.0权限申请AndPermission

这篇文章主要介绍了Android超清晰6.0权限申请AndPermission,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿微信录制语音功能

这篇文章主要介绍了Android仿微信录制语音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多