android Accessibility 实现自动升级,安装
来源:互联网 发布:东经北纬查询软件 编辑:程序博客网 时间:2024/05/14 22:37
当初google 开发此功能主要是对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示,物理反馈,和其他可选的操作模式。
随着Android版本的不断升级,Android Accessibility功能也越来越强大,Android 4.0版本以前,系统辅助服务功能比较单一,仅仅能过单向获取窗口元素信息,比如获取输入框用户输入内容。到Android 4.1版本以后,系统辅助服务增加了与窗口元素的双向交互,此时可以通过辅助功能服务操作窗口元素,比如点击按钮等。
由于系统辅助服务能够实时获取您当前操作应用的窗口元素信息,这有可能给你带来隐私信息的泄露风险,比如获取非密码输入框的输入内容等。同时通过辅助功能也可以模拟用户自动化点击应用内元素,也会带来一定的安全风险.
Accessibility使用指导:
android.accessibilityservice包提供增强的或者可供选择的反馈给用户,他是一个service。
这个service运行在后台,接收events发出时系统的回调或者反馈。这些event传递用户接口的一些反馈,例如,用户焦点改变了,button被点击了,等等。
这个service提供了查询当前活动窗口内容的能力,这样可以获取当前手机上活动窗口的信息哦。
如果你想开发这样一个类,需要集成这个类,并且实现他的抽象方法。
AccessibilityServiceInfo类来描述android.accessibilityservice,系统通过封装过的AccessibilityServiceInfo,使用events来通知android.accessibilityservice触发一些事件。
1.先写自定义一个类extends AccessibilityService.同时实现onAccessibilityEvent 和onInterrupt 方法,onAccessibilityEvent是每个事件捕获都会调用的方法
@Override
public void onAccessibilityEvent(AccessibilityEvent event)
@Override
public void onInterrupt()
2.自定义处理过程 processinstallApplication,
A.查找相关处理的控件 .findAccessibilityNodeInfosByText 这里可以根据显示内容来进行查找,也可以根据id来查找
B.把我们想要处理的事件直接通给对应的View 通过performAction方法ps: performAction(AccessibilityNodeInfo.ACTION_CLICK);
3.通过AndroidMainfest 声明相应的Service 注意需要 BIND_ACCESSIBILITY_SERVICE权限
A.声明Service
<service android:label="@string/acc_service_name" android:name="com.qding.accessibility.InstallUnInstallService"
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/install_accessibility" />
</service>
B.配置监听属性
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask" //事件类型
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:packageNames="com.android.packageinstaller" //监听应用名
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_service_description"
android:notificationTimeout="500" />
话不多说直接上核心处理安装代码
private void processinstallApplication(AccessibilityEvent event) {Log.d(TAG, "processinstallApplication !!!!!!!!!!!! " + event.getPackageName());int childCount = event.getSource().getChildCount();for(int i=0 ;i< childCount;i++) {AccessibilityNodeInfo child = event.getSource().getChild(i);Log.d(TAG, "processinstallApplication test test " + child.getText());}if (event.getSource() != null) {if (event.getPackageName().equals("com.android.packageinstaller")) {List<AccessibilityNodeInfo> unintall_nodes = event.getSource().findAccessibilityNodeInfosByText("安装");Log.d(TAG, "processinstallApplication dialog install ## " + unintall_nodes.size());if (unintall_nodes!=null && !unintall_nodes.isEmpty()) {AccessibilityNodeInfo node;for(int i=0; i<unintall_nodes.size(); i++){node = unintall_nodes.get(i);Log.d(TAG, "processinstallApplication install " + node.getClassName() + " " + node.getText());if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {node.performAction(AccessibilityNodeInfo.ACTION_CLICK);}if (node.getClassName().equals("android.widget.TextView") && node.isEnabled()) {node.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}List<AccessibilityNodeInfo> ok_nodes = event.getSource().findAccessibilityNodeInfosByText("确定");Log.d(TAG, "processinstallApplication dialog ok " + ok_nodes.size());if (ok_nodes!=null && !ok_nodes.isEmpty()) {AccessibilityNodeInfo node;for(int i=0; i<ok_nodes.size(); i++){node = ok_nodes.get(i);Log.d(TAG, "processinstallApplication dialog ok " + node.getClassName());if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {node.performAction(AccessibilityNodeInfo.ACTION_CLICK);}if (node.getClassName().equals("android.widget.TextView") && node.isEnabled()) {node.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}List<AccessibilityNodeInfo> next_nodes = event.getSource().findAccessibilityNodeInfosByText("下一步");Log.d(TAG, "processinstallApplication dialog next " + next_nodes.size());if (next_nodes!=null && !next_nodes.isEmpty()) {AccessibilityNodeInfo node;for(int i=0; i<next_nodes.size(); i++){node = next_nodes.get(i);if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {node.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}List<AccessibilityNodeInfo> open_nodes = event.getSource().findAccessibilityNodeInfosByText("打开");Log.d(TAG, "processinstallApplication dialog open " + open_nodes.size());if (open_nodes!=null && !open_nodes.isEmpty()) {AccessibilityNodeInfo node;for(int i=0; i<open_nodes.size(); i++){node = open_nodes.get(i);Log.d(TAG, "processinstallApplication dialog open " + node.getClassName());if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {node.performAction(AccessibilityNodeInfo.ACTION_CLICK);}if (node.getClassName().equals("android.widget.TextView") && node.isEnabled()) {node.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}List<AccessibilityNodeInfo> com_nodes = event.getSource().findAccessibilityNodeInfosByText("完成");Log.d(TAG, "processinstallApplication dialog com " + com_nodes.size());if (com_nodes!=null && !com_nodes.isEmpty()) {AccessibilityNodeInfo node;for(int i=0; i<com_nodes.size(); i++){node = com_nodes.get(i);Log.d(TAG, "processinstallApplication dialog com " + node.getClassName());if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {node.performAction(AccessibilityNodeInfo.ACTION_CLICK);}if (node.getClassName().equals("android.widget.TextView") && node.isEnabled()) {node.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}}}}
- android Accessibility 实现自动升级,安装
- Android Accessibility自动安装app
- Android Accessibility(辅助功能) --实现Android应用自动安装、卸载
- Android Accessibility(辅助功能) --实现Android应用自动安装、卸载
- Android Accessibility(辅助功能) --实现Android应用自动安装、卸载
- Android Accessibility(辅助功能) --实现Android应用自动安装、卸载 .
- 利用android Accessibility实现免root的自动安装、卸载
- 使用Android Accessibility实现免Root自动批量安装功能
- 使用Android Accessibility实现免Root自动批量安装功能
- 使用Android Accessibility实现免Root自动批量安装功能
- 使用Android Accessibility实现免Root自动批量安装功能
- Android Accessibility(辅助功能) --实现Android应用自动安装、卸载、强行停止
- android实现自动升级并安装打开
- android实现自动升级并安装打开
- android实现自动升级并安装打开
- Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)
- Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)
- android apk自动升级实现
- WIN7旗舰版下安装oracle 10g容易出现的问题
- AS4,AS5,AS6支持NTFS格式的实现和思考
- Maven Settings.xml Reference
- 一个fork的面试题
- 循环打印等腰三角形
- android Accessibility 实现自动升级,安装
- JSONObject_v3
- Yii2-rbac权限基础--权限管理的实现
- zend_mm_heap corrupted
- JAVA基础整理
- 栈 之 寻找下一个较大元素 next greater element
- TCP/IP、Http、Socket的区别
- Android activity的生命周期
- Android:适配不同分辨率&hdpi、mdpi、ldpi&横屏竖屏