栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Android智能硬件开发】【002】通过Accessibility自动安装apk

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Android智能硬件开发】【002】通过Accessibility自动安装apk

什么是Accessibility

Accessibility是安卓的一套内置功能,它常被翻译为辅助功能,或无障碍服务

它通过一系列的功能,来对有系统使用障碍的用户群体进行帮助

它可以帮助用户更方便地进行阅读、触控、听声音等

我们可以自定义一个自己的服务,继承自AccessibilityService

重写其中的onAccessibilityEvent方法,来指定如何对用户进行帮助

通过Accessibility进行安装的原理

Accessibility服务在经过授权后,可以对屏幕内容进行抓取识别

我们判断出屏幕内容后,再进行自动点击,就可以达到自动安装的目的

所以,通过Accessibility进行安装,本质上是模拟用户触发点击事件

自定义AccessibilityService

我们自定义一个AccessibilityService,用于帮助用户自动点击

	import android.accessibilityservice.AccessibilityService;
	import android.view.accessibility.AccessibilityEvent;
	import android.view.accessibility.AccessibilityNodeInfo;
	
	import com.easing.commons.android.code.Console;
	
	import java.util.List;
	
	//APK自动安装服务
	public class AutoInstallService extends AccessibilityService {
	
	    @Override
	    public void onAccessibilityEvent(AccessibilityEvent event) {
	
	        //只处理安装事件
	        if (event != null && !event.getPackageName().toString().contains("packageinstaller"))
	            return;
	        Console.info("AutoInstallService", "onAccessibilityEvent");
	
	        //特殊情况不处理
	        AccessibilityNodeInfo eventNode = event.getSource();
	        if (eventNode == null)
	            return;
	
	        //特殊情况不处理
	        AccessibilityNodeInfo windowNode = getRootInActiveWindow();
	        if (windowNode == null)
	            return;
	
	        //自动点击
	        findTextAndClick(windowNode, "允许");
	        findTextAndClick(windowNode, "安装");
	        findTextAndClick(windowNode, "继续安装");
	        findTextAndClick(windowNode, "下一步");
	        findTextAndClick(windowNode, "打开");
	
	        //回收对象
	        eventNode.recycle();
	        windowNode.recycle();
	    }
	
	    @Override
	    protected void onServiceConnected() {
	        Console.info("AutoInstallService", "onServiceConnected");
	        super.onServiceConnected();
	    }
	
	    @Override
	    public void onInterrupt() {
	        Console.info("AutoInstallService", "onInterrupt");
	    }
	
	    //找到指定文字的按钮,并自动点击
	    protected void findTextAndClick(AccessibilityNodeInfo nodeInfo, String text) {
	        List nodes = nodeInfo.findAccessibilityNodeInfosByText(text);
	        if (nodes == null || nodes.isEmpty())
	            return;
	        for (AccessibilityNodeInfo node : nodes)
	            if (node.isEnabled() && node.isClickable() && (node.getClassName().equals("android.widget.Button") || node.getClassName().equals("android.widget.CheckBox")))
	                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
	    }
	}

注册AccessibilityService

在Manifest中添加以下代码

	
	
	    
	        
	    
	    
	

在res/xml下新建一个accessibility_config.xml

	
	

启用自定义的AccessibilityService

	startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));

注意事项

有些定制的硬件,由于性能问题,对很多系统服务进行了限制或阉割,可能会导致AccessibilityService无法使用

可以自己多找几个手机试试,如果是手机问题,就不要多浪费时间了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号