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

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

报告相同问题?

悬赏问题

  • ¥50 gki vendor hook
  • ¥15 centos7中sudo命令无法使用
  • ¥15 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联