Android利用AccessibilityService实现自动装总结(一)

来源:互联网 发布:php x86 x64 编辑:程序博客网 时间:2024/05/16 14:43

最近一直在做Android自动安装的利用,下面的内容主要是最近自己在完成这个功能的一些心得,以及一些源码。

下面就先介绍一下AccessibilityService:

在google官网上面对AccessiblilityService的介绍是这样的:An accessibility service runs in the background and receives callbacks by the system when AccessibilityEvents are fired. Such events denote some state transition in the user interface, for example, the focus has changed, a button has been clicked, etc. Such a service can optionally request the capability for querying the content of the active window. Development of an accessibility service requires extending this class and implementing its abstract methods。翻译过来就是:一个辅助服务在后台运行,并在系统重启时辅助激发事件接收回调。这样的事件表示在用户界面中的一些状态转移,例如,焦点已改变,一个按钮被点击等这样的服务可以选择请求的能力,用于查询活动窗口的内容。辅助功能服务的发展需要扩展此类和实现它的抽象方法。

一:AccessibilityService的生命周期:

AccessibilityService的生命周期由系统进行管理,同时它也遵循Service的生命周期。此外,启动或通过启用或禁用的设备设置停车辅助功能服务是由明确的用户动作完全触发。后系统结合到服务调用onServiceConnected()。这种方法可以由希望执行后绑定设置客户端覆盖。

二:AccessibilityService的用法:

①:首先我们需要自己重写AccessibilityService类,在我的demo里面AutomaticInstallationService来继承AccessibilityService。

代码如下:

public class AutomaticInstallationService extends AccessibilityService {// 大多数的手机包名一样,联想部分机型的手机不一样private String[] packageNames = { "com.android.packageinstaller", "com.lenovo.security", "com.lenovo.safecenter" };/** * 此方法是accessibility service的配置信息 写在java类中是为了向下兼容 */@Overrideprotected void onServiceConnected() {super.onServiceConnected();AccessibilityServiceInfo mAccessibilityServiceInfo = new AccessibilityServiceInfo();// 响应事件的类型,这里是全部的响应事件(长按,单击,滑动等)mAccessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;// 反馈给用户的类型,这里是语音提示mAccessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;// 过滤的包名mAccessibilityServiceInfo.packageNames = packageNames;}@Overridepublic boolean onUnbind(Intent intent) {return super.onUnbind(intent);}@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {}@Overridepublic void onInterrupt() {}}

②:在res/xml文件夹下面,新建xml文件,用来设置AccessibilityService的一些配置信息:

accessibility_service_config.xml文件的主要代码如下:
<?xml version="1.0" encoding="utf-8"?><accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"    android:canRetrieveWindowContent="true"    android:description="@string/description"    android:notificationTimeout="100"/>

③:在Manifest.xml文件进行配置:

<service            android:name="com.moxiu.mxautomaticinstallation.service.AutomaticInstallationService"            android:label="@string/automatic_installation"            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/accessibility_service_config" />        </service>

做完这些,你就可以在辅助功能里面显示你设置的辅助功能服务了。

特别注意的是:一定得配置下面的属性,不然读取AccessibilityEvent.getResource()方法返回的结果会为null。

<span style="font-size:32px;color:#ff0000;"><strong> android:canRetrieveWindowContent="true"</strong></span>

0 0
原创粉丝点击