当前位置:   article > 正文

Android之辅助服务上篇————AccessibilityService使用_android辅助服务

android辅助服务

Android之辅助服务上篇————AccessibilityService使用

一.前言

最近好久没写博客了,特别是Android系统启动这一个系列,虽然过程已经理了很多遍了,但是由于实习期间是在抽不出时间,没办法输出文章。最近接触了Android辅助服务,即AccessibilityService的相关内容,也算是解决了我一直一来的困惑——微信抢红包插件是怎么实现的。这两天,抽空总结一下这一部分相关的内容,上篇介绍使用,下篇分析原理。

二.概述

1.辅助服务是什么

下面两个链接是Google官方对于辅助服务的介绍:
辅助服务使用官方介绍
辅助服务类官方api文档

辅助服务的设计初衷提供给无法和界面进行交互的残疾用户。来协助帮助他们进行一些用户操作,比如点击,返回,长按,获取屏幕信息等能力。后来被开发者另辟蹊径,用于一些插件开发,做一些监听第三方应用的插件。

下面是辅助服务的继承关系:
在这里插入图片描述

2.辅助服务生命周期

辅助服务的生命周期由系统专门管理,并遵循Server的生命周期。服务的启动只能用户在设备设置中明确启动服务来触发。当系统绑定到服务后,它会调用AccessibilityService#onServiceConnected()方法。当用户在设置设置中关闭时,辅助服务功能将停止,或者调用AccessibilityService#disableSelf()方法。giant服务会被关闭销毁

设备设置无障碍选择:
在这里插入图片描述

下面是关于AccessibilityService的使用

三.配置

1.继承AccessbilityService类

要使用辅助服务,首先先继承AccessbilityService类,并且重写其方法。

public class StatusAccessibilityService extends AccessibilityService {
   


    /**
     * 发生用户界面事件回调此事件
     * @param event
     */
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
   

    }

    /**
     * 中断可访问性反馈
     */
    @Override
    public void onInterrupt() {
   

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

除了上面的两个必须要重写的方法外,AccessbilityService还提供了下面的一些方法:

  • disableSelf(),禁用当前服务,也就是说关闭当服务
  • dispatchGesture(GestureDescription gesture, AccessibilityService.GestureResultCallback callback, Handler handler),将手势发送到触摸屏
  • findFocus(int focus):寻找到具有指定焦点类型的视图。
  • getRootInActiveWindow():获取当前活动窗口中的根节点。
  • getServiceInfo():获取当前服务的配置信息
  • getSystemService(String name):获取系统服务
  • getWindows():获取屏幕上的窗口。
  • performGlobalAction(int action):执行全局操作:比如返回,回到主页,打开最近等操作
  • setServiceInfo(AccessibilityServiceInfo info):设置当前服务的配置信息 (下面的配置AccessbilityService会介绍)

不太常用的:

  • getAccessibilityButtonController():返回系统导航区域内辅助功能按钮的控制器。
  • getFingerprintGestureController():获取指纹手势的控制器。
  • getMagnificationController():返回放大器控制器,可用于查询和修改显示放大率的状态。
  • getSoftKeyboardController():返回软键盘控制器,可用于查询和修改软键盘显示模式。
2.在AndroidManifest中注册该服务

AccessbilityService是一个服务,所以同样,他也要在AndroidManifest中注册:

        <service
            android:name="com.hahak.walle.accessibilitydame.StatusAccessibilityService"
            android:label="辅助服务测试"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService"/>
            </intent-filter>
        </service>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • android:permission:需要指定BIND_ACCESSIBILITY_SERVICE权限,这是4.0以上的系统要求的
  • intent-filter:这个name是固定不变的
3.配置AccessbilityService

接下来,就是配置服务参数,即设定AccessbilityService所能干的事。
配置方法有两种,一种是在代码中动态设置,一种是写配置文件。

方法1.写配置文件
首先在AndroidManifest中生命配置文件的位置

       <service
            android:name="com.hahack.walle.AutoCheckStatusAccessibilityService"
            android:label="运营助手:自动艾特用户"
            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/allocation"/>
        </service>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

其次,在@xml/allocation文件中,声明下面的内容

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:description="demo"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:canRetrieveWindowContent="true"
    android:notificationTimeout="1000"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

方法2:.在代码中动态添加
在自定义的AccessibilityService类中,可以通过在AccessibilityServiceInfo类重写onServiceConnected(),并通过 this.setServiceInfo来添加配置

@Override
public void onServiceConnected() {
   

    info.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED |
            AccessibilityEvent.TYPE_VIEW_FOCUSED;

    info.packageNames = new String[]
            {
   "com.example.android.myFirstApp", "com.example.android.mySecondApp"};

    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN

    info
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/310998
推荐阅读
相关标签
  

闽ICP备14008679号