您当前的位置: 首页 >  硬件开发

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

命运之手 发布时间:2021-11-26 18:21:40 ,浏览量:1

什么是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无法使用

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

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0423s