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

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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • zqbnqsdsmd 2020-05-13 01:33
    关注
    评论
  • doInstyle 2020-05-13 15:37
    关注

    同求方法,现在貌似不能通过搜索的方式,来完成action的动作

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 神经网络建立应力预测模型
  • ¥20 反编译一款APP手游,解密出lua脚本。
  • ¥15 改一下,代码,让代码符合要求
  • ¥15 报错问题,只有两个错误,如图片所示,i多次初始化
  • ¥15 matlab runtime 如何收费
  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 生信simpleaffy包下载
  • ¥15 在二层网络中,掩码存在包含关系即可通信
  • ¥15 端口转发器解析失败不知道电脑设置了啥