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

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的动作

    点赞 评论

相关推荐 更多相似问题