【移动应用开发技术】AccessibilityService的使用_第1页
【移动应用开发技术】AccessibilityService的使用_第2页
【移动应用开发技术】AccessibilityService的使用_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】AccessibilityService的使用

最近使用AccessibilityService完成业务,感觉还是蛮有意思的,顺手写一下这个类的用法,将来要是再有需要用到的时候也比较方便复习查阅。AccessibilityService是用于开发无障碍功能应用的api类,帮助残障人士使用app。同样的,使用它可以帮助我们对用户体验进行提升,例如手机助手中的一键安装,免去了我们多次点击的麻烦,它还能帮助我们完成一些看似外挂般的插件,比如抢红包插件。如何使用AccessibilityService:首先,创建子类继承AccessibilityService,AccessibilityService是服务的一种,那么我们需要在Mainifest注册,同时添加相对应的权限和过滤条件如下图。<service

android:name="packagename.YourAccessibilityService"

android:enabled="true"

android:exported="true"

android:label="@string/app_name"

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

<intent-filter>

<actionandroid:name="android.accessibilityservice.AccessibilityService"/>

</intent-filter>

<meta-data

android:name="android.accessibilityservice"

android:resource="@xml/rob_service_config"/></service>AccessibilityService可以在xml中配置它的辅助信息即<meta-data

android:name="android.accessibilityservice"

android:resource="@xml/rob_service_config"/>我们需要在res文件夹中增加对应的xml文件res--xml--rob_service_config.xml,内容如下<accessibility-servicexmlns:android="/apk/res/android"

android:accessibilityEventTypes="typeAllMask"

android:accessibilityFeedbackType="feedbackSpoken"

android:description="@string/accessibility_service_description"

android:accessibilityFlags="flagDefault"

android:canRetrieveWindowContent="true"

android:notificationTimeout="100"

android:packageNames="package_name_1,package_name_2"/>eventTypes代表该服务关注的事件类型,例如:typeNotificationStateChanged

通知栏状态改变

typeViewClicked

点击事件

typeWindowStateChanged

窗体状态变化

typeAllMask

拦截所有的事件等等等,这里我们可以根据我们的需求去选择拦截类型。packageNames即我们想要监听的应用包名,可以监听多个应用,包名之间以","隔开。同样的我们可以在代码中配置这些信息:@Override

publicvoidonCreate(){

super.onCreate();//

AccessibilityServiceInfoinfo=newAccessibilityServiceInfo();//

info.packageNames=installPackge;//监听过滤的包名//

info.eventTypes=AccessibilityEvent.TYPES_ALL_MASK;//监听哪些行为//

info.feedbackType=AccessibilityServiceInfo.FEEDBACK_SPOKEN;//反馈//

info.notificationTimeout=100;//通知的时间//

setServiceInfo(info);

}做完这些以后,开启服务,打开设置中的辅助选项,选择你的辅助服务并开启,你就可以享受拦截其他app各种操作的快感了~那么,拦截到的事件在什么地方呢,AccessibilityService是一个抽象类,它的核心方法就是他的抽象方法public

abstract

void

onAccessibilityEvent(AccessibilityEvent

event);这个event就是我们拦截到的事件,这个方法是异步执行的(当然了,万一这事件被拦截并处理了半天,人家的app还让不让人用了),这个时间有view中的accessibilityDelegate对象发出。好了,事件拿到了,就能对里面的内容大做文章了,AccessibilityEvent最重要的就是它的eventType了,/***Getstheeventtype.**@returnTheeventtype.*/publicintgetEventType(){

returnmEventType;}毕竟我们需要知道这是什么类型时间才好继续往下做嘛,然后就是String

className

=

event.getClassName().toString()因为监听的是别人家的app,我们不知道我们想要知道的页面类名是什么,所以想要在指定页面做指定事情那就需要这个页面的类名,有了这个方法,你还会不知道别人家的活动页面的类名叫什么了吗?接下来就是getSource了获取事件的节点信息,又或者我们可以使用/***Getstherootnodeinthecurrentlyactivewindowifthisservice*canretrievewindowcontent.Theactivewindowistheonethattheuser*iscurrentlytouchingorthewindowwithinputfocus,iftheuserisnot*touchinganywindow.*<p>*<strong>Note:</strong>Inordertoaccesstherootnodeyourservicehas*todeclarethecapabilitytoretrievewindowcontentbysettingthe*{@linkandroid.R.styleable#AccessibilityService_canRetrieveWindowContent}*propertyinitsmeta-data.Fordetailsreferto{@link#SERVICE_META_DATA}.*</p>**@returnTherootnodeifthisservicecanretrievewindowcontent.*/publicAccessibilityNodeInfogetRootInActiveWindow(){

returnAccessibilityInteractionClient.getInstance().getRootInActiveWindow(mConnectionId);}获取该事件触发时的活动窗口,从这个活动窗口拿到我们想要的信息,比如包含某文字的控件,或者执行想要做的辅助事件,比如点击、滚动等。AccessibilityNodeIfo对象包含了树状父子节点信息,public

List<AccessibilityNodeInfo>

findAccessibilityNodeInfosByViewId(String

viewId){...}

public

List<AccessibilityNodeInfo>

findAccessibilityNodeInfosByText(String

text){...}这两个方法可以找到包含某文字或者某控件id名称的节点public

boolean

performAction(int

action)

{...}

public

boolean

performAction(int

action,

Bundle

arguments){...}这两个方法可以使该节点执行某个动作比如AccessibilityNodeInfoA.CTION_CLICK此外对于部分action,可以携带额外的参数Bundlebundle=newBundle();bundle.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT,0);bundle.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT,1);nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_SELECTION,bundle);此外AccessibilityService本身有一个方法*@see#GLOBAL_ACTION_BACK*@see#GLOBAL_ACTION_HOME*@see#GLOBAL_ACTION_NOTIFICATIONS*@see#GLOBAL_ACTION_RECENTS*/publicfinalbooleanperformGlobalAction(intaction)让我们去执行全局的动作,如回退,返回home页等。AccessibilityService的使用大体就是这样了,至于再详细的东西就一个个的去文档中找,并一个个使用它们吧。此外,再记一下使用AccessibilityService过程中用到的tool一个是D:\Users\XXX\Android\sdk\build-tools\23.0.0目录下的aapt.exe使用cmd切换到aapt目录执行aaptdumpbadging<file_path.ap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论