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

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条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题