使用辅助功能

时间:2017-02-20 18:04:48

标签: android accessibility

我想创建一个能够扫描"其他应用程序和布局,并找出是否有按钮等。 有些应用程序,比如whatsapp,不允许第三部分进入应用程序,因此我使用可访问性可能是解决方案。 现在的问题是我从未使用过辅助功能,所以有人可以请你告诉我如何扫描"应用程序的布局找到按钮? 非常感谢

1 个答案:

答案 0 :(得分:0)

您正在寻找的是辅助功能服务。配置辅助功能服务有点复杂。我已经建立了一个可访问性样板代码库,该代码设置了一个AccessibilityService,它将节点层次结构记录到LogCat,并将默认项目设置活动设置为它的设置活动。以下是一些亮点,因为我不喜欢发布github repos作为答案。请注意,我使用了很多自己的库。 CLog是一个日志库,AndroidAccessibilityUtils用一些常用的实用程序函数包装节点信息。您可以在底部的github repo上的build.gradle文件中找到对依赖项的引用。以下是一些代码亮点。

您的manifest.xml文件将与Activity明显不同,并且应该在Application元素中包含这样的条目:

<application .... >
    ...
    <service
        android:name="com.moba11y.basicaccessibilityservice.BasicAccessibilityService"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >

        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>

        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/service_config" />

    </service>
    ...
</application>

首先,您需要创建辅助功能服务的子类:

public class BasicAccessibilityService extends AccessibilityService {

    static {
        CLog.initialize(BasicAccessibilityService.class.getSimpleName(), BuildConfig.DEBUG);
    }
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        CLog.d(event.toString());

        switch (event.getEventType()) {
            //On Gesture events print out the entire view heirarchy!
            case AccessibilityEvent.TYPE_GESTURE_DETECTION_START:
                CLog.d(A11yNodeInfo.wrap(getRootInActiveWindow()).toViewHeirarchy());

            default: {
                //If the event has a source, let's print it out separately.
                if (event.getSource() != null) {
                    CLog.d(A11yNodeInfo.wrap(event.getSource()).toViewHeirarchy());
                }
            }
        }
    }

    @Override
    public void onInterrupt() {
        CLog.e("Service Interrupted: Have never actually had this happen.");
    }
}

这是大部分亮点。你还应该有一个&#34; service_config&#34;具有属性的XML,如Manifest XML文件的更改中所引用。更多细节和合理的观点可以在GitHub上的开源回购中找到。

https://github.com/chriscm2006/Android-Accessibility-Service-Boilerplate

相关问题