周国宝 2020-05-11 15:45 采纳率: 100%
浏览 1571
已采纳

Android 如何通过AccessibilityService控制软键盘上的按键

** 设备**:Android 手机(未Root)

技术实现:AccessibilityService 无障碍服务

业务场景

在一部未Root的Android手机上,通过无障碍服务实现在其他App页面上,进行搜索操作,输入完文字信息之后,需要点击软键盘上的搜索按键才能完成

具体问题:

现在遇到一个问题,如何对软键盘上的按键(比如搜索按键KeyEvent.KEYCODE-SEARCH)进行点击操作?

目前已经做过一些尝试:  

1 遍历寻找软键盘上按键的NodeInfo

在软键盘弹起后,通过AccessibilityService.getRootInActiveWindow()获取到页面元素后,向下遍历所有的NodeInfo,无法找到与搜索按键相关的NodeInfo

2 AccessibilityService.getSoftKeyboardController()

官方提供了关于软键盘的控制,但其只能控制软键盘打开和关闭,无法操作指定按键

3 AccessibilityService.performGlobalAction()

全局事件中,没有操作软键盘按键的Action

经过上面几种方式的尝试都失败了
请大家帮忙,给予一些解决方法或思路

  • 写回答

3条回答 默认 最新

  • qiji_xiaofeng 2020-05-20 15:35
    关注
        final Path path = new Path();
        path.moveTo(X, Y);   //X和Y是需要双击的按钮坐标
        GestureDescription.Builder builder = new GestureDescription.Builder();
        GestureDescription gestureDescription = builder.addStroke(
                new GestureDescription.StrokeDescription(path, 0, 100)).build();
        dispatchGesture(gestureDescription, new GestureResultCallback() {
            @Override
            public void onCompleted(GestureDescription gestureDescription) {
                super.onCompleted(gestureDescription);
            }
            @Override
            public void onCancelled(GestureDescription gestureDescription) {
                super.onCancelled(gestureDescription);
                Log.d(TAG, "scroll cancell.");
            }
        }, null);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译