下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《铁路信号集中监测系统》 课件 项目五 铁路信号集中监测系统维护与管理
- 【同步备课】第3课时 小数乘小数(一)(教案)五年级数学上册(人教版)
- 2024年租赁安全协议常规版(四篇)
- 柑橘大实蝇防控技术方案
- 2024年车间承包合同范本(三篇)
- 2024年标准新款车辆买卖合同样本(二篇)
- 2024年对外加工装配合同经典版(3篇)
- 2024年木材购销合同范文(二篇)
- 2024年保单质押借款合同标准模板(二篇)
- 2024年南宁种猪买卖合同(二篇)
- 酒店质检表格
- 红色卡通风幼儿园国庆节主题班会PPT模板
- 科技计划项目(课题)事项调整申请表
- JJF(津) 72-2022 辐射测温用-50℃~1400℃黑体辐射源校准规范
- 一年级下册体育与健康教案-20小篮球:篮球行进间双手胸前传、接球 |科学课标版
- DBJ∕T 15-199-2020 装配式混凝土结构检测技术标准
- 开放教育毕业论文写作辅导
- 幼儿园教师优质课评分表
- 欢度六一儿童节ppt模板
- 全国园林绿化工程定额
- 26.巨人的花园 课件(28张).ppt
评论
0/150
提交评论