accessibity android,Android辅助功能

本文介绍了如何使用Android的AccessibilityService进行自动化操作,包括向EditText中插入文本和模拟手势点击。首先,配置accessibilityservice.xml以启用事件监听和手势支持。然后,通过 AccessibilityNodeInfo 执行文本输入,并利用GestureDescription进行手势模拟。这些技术在自动化测试和辅助功能开发中非常实用。
摘要由CSDN通过智能技术生成

相关文章1Api比较详细

相关文章2

AccessibilityService

在res下新建xml目录

xml目录里建立配置accessibilityservice.xml

android:accessibilityEventTypes="typeAllMask"

android:accessibilityFeedbackType="feedbackGeneric"

android:accessibilityFlags="flagDefault"

android:canRequestEnhancedWebAccessibility="true"

android:canRequestFilterKeyEvents="true"

android:canRequestTouchExplorationMode="true"

android:canRetrieveWindowContent="true"

android:description="@string/accessDescription"

android:notificationTimeout="100"

android:packageNames="com.tencent.mm"

android:settingsActivity=""

android:summary="" />

manifest.xml下

android:label="@string/app_name"

android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

android:name="android.accessibilityservice"

android:resource="@xml/第二个辅助功能配置方式的文件,存放在xml下"/>

往一个EditText里添加文字

public boolean chatSendEditInput(String text) {

if (TextUtils.isEmpty(text)) return false;

try {

Thread.sleep(300);

} catch (InterruptedException e) {

e.printStackTrace();

}

List chatSendEditList = accNodeInfo.findAccessibilityNodeInfosByViewId(chatSendEditId);

AccessibilityNodeInfo chatSendEditNode = null;

if (null != chatSendEditList && chatSendEditList.size() != 0) {

chatSendEditNode = chatSendEditList.get(0);

}

if ("android.widget.EditText".equals(chatSendEditNode.getClassName())) {

Bundle arguments = new Bundle();

arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,

text);

return chatSendEditNode.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT,

arguments);

}

return false;

}

手势模拟点击

android7.0(N) 以上才可以

xml里配置属性:

android:canPerformGestures="true"

java方法:

public static void useGestureClick(AccessibilityNodeInfo info, AccessibilityService accessibilityService) {

if (info == null) {

return;

}

Rect rect = new Rect();

info.getBoundsInScreen(rect);

GestureDescription.Builder builder = new GestureDescription.Builder();

Path path = new Path();

path.moveTo(rect.centerX(), rect.centerY());

GestureDescription gestureDescription = builder

.addStroke(new GestureDescription.StrokeDescription(path, 100, 50))

.build();

accessibilityService.dispatchGesture(gestureDescription, new AccessibilityService.GestureResultCallback() {

@Override

public void onCompleted(GestureDescription gestureDescription) {

super.onCompleted(gestureDescription);

}

}, null);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值