admin管理员组文章数量:1586159
使用AccessibilityService实现APP的自动安装与卸载
作者: |
蒋东国 |
时间: |
2016年12月6日 星期二 |
应用来源: |
hqt APP(测试机型:三星 Note4) |
博客地址: |
http://blog.csdn/andrexpert/article/details/53494776 |
情景再现:“平时在使用豌豆荚或者360手机助手下载软件时,我们可以设置软件静默安装和智能安装,这两种情况允许用户无需操作任何界面就能够实现软件的一键下载安装,用户体验大大提高。我们知道静默安装主要是针对于已经Root的手机,只需执行相关的shell命令即可实现,那么,智能安装又是怎么一回事呢?”
从Google官方文档来看,AccessibilityService主要用于开发者为其应用开发一些增强用户体验的功能(辅助功能),比如语音合成、手势导航,甚至可以获得当前活动窗口的内容并模拟用户进行文本输入、Button点击操作等等,可以说功能非常强(从安全的角度来说,一般不建议开启某些应用的AccessibilityService)。从Accessibility-Service.java源码可知,AccessibilityService继承于Service并且采用bind方式启动,因此AccessibilityService的生命周期遵循Service的生命周期,不同的是它仅由系统管理,AccessibilityService的开启、关闭必须由用户自己到”设置(settings)”界面开启。除了应用进程被非正常终止或者被卸载,AccessibilityService被开启后会一直保持着开启的状态。AccessibilityService.java部分源码:
public abstract class AccessibilityService extendsService {
public abstract voidonAccessibilityEvent(AccessibilityEvent event);
…..
@Override
public final IBinder onBind(Intent intent) {
returnnew IAccessibilityServiceClientWrapper(this, getMainLooper(), new Callbacks() {
@Override
publicvoid onServiceConnected() {
AccessibilityService.this.onServiceConnected();
}
@Override
publicvoid onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityService.this.onAccessibilityEvent(event);
}
……
});
}
}
1.建立AccessibilityService
实现一个AccessibilityService子类,并重写如下方法:onServiceConnected()(当系统成功启动服务时调用,可用于对服务进行配置或弹出提示信息)、onAccessibilityEvent(AccessibilityEvent event)(当指定事件出发该服务时调用,用于实现事件处理的业务逻辑模块)、onInterrupt()(终止accessibility service时调用)。
@Override
protected voidonServiceConnected() {
super.onServiceConnected();
//系统启动服务成功,弹出提示信息
Toast.makeText(UnAccessibilityService.this,"连接服务成功",
Toast.LENGTH_SHORT).show();
}
@Override
public voidonAccessibilityEvent(AccessibilityEvent event) {
Log.d("sms","onAccessibilityEvent被调用");
//卸载事件捕获,调用应用卸载方法
uninstallApplication(event,”确定”);
}
那么问题来了,当用户点击一个Button实现卸载功能时,AccessibilityService是如何捕获点击事件并执行卸载任务的?这就借助于另外两个类:AccessibilityNodeInfo、AccessibilityEvent。AccessibilityEvent封装了所有用户触发的事件,这些事件将由系统发送给AccessibilityService;然后,AccessibilityService再根据/res/xml/accessibility_service_config.xml中的android:accessibilityEventTypes 属性确定是否对该事件进行捕获,由于这里将该属性值设置为” typeAllMask”,我们定义的AccessibilityService将对用户操作的所有事件进行捕获。而AccessibilityNodeInfo则封装了当前状态视图的属性,即当前状态视图组件以树的形式构建。
接下来,我们将借助Accessibility Service模拟用户完成点击操作,实现应用的卸载。由于系统卸载应用调用的是包名为” com.android.p
本文标签: AccessibilityServiceapp
版权声明:本文标题:使用AccessibilityService实现APP的自动安装与卸载 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727973901a1140467.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论