自学内容网 自学内容网

安卓无障碍获取录屏权限

每次需要录屏操作时,都会弹窗需要用户手动授权比较麻烦,可以通过无障碍模拟用户点击进行授权。

方法主要有三种:

1.查找“立即开始”(华为手机是“允许”)节点,模拟点击;

 @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        Log.i("AccessibilityEvent", event.toString());

        if (event == null || !event.getPackageName().toString()
                .contains("com.android.systemui"))//不写完整包名,是因为某些手机(如小米)安装器包名是自定义的
            return;
        /*
        某些手机安装页事件返回节点有可能为null,无法获取安装按钮
        例如华为mate10安装页就会出现event.getSource()为null,所以取巧改变当前页面状态,重新获取节点。
        该方法在华为mate10上生效,但其它手机没有验证...(目前小米手机没有出现这个问题)
        */
        Log.i(TAG, "onAccessibilityEvent: " + event);
        AccessibilityNodeInfo eventNode = event.getSource();
  

        /*
        模拟点击->立即开始,只验证了小米5s plus(MIUI 9.8.4.26)、小米Redmi 5A(MIUI 9.2)、华为mate 10
        其它品牌手机可能还要适配,适配最可恶的就是出现安装广告按钮,误点安装其它垃圾APP(典型就是小米安装后广告推荐按钮,华为安装开始官方安装)
        */
        AccessibilityNodeInfo nodeInfo= getRootInActiveWindow(); //当前窗口根节点
        if (rootNode == null)
            return;

        if (event.getClassName().toString().contains("MediaProjectionPermissionActivity")) {
           
    List<AccessibilityNodeInfo> nodes = nodeInfo.findAccessibilityNodeInfosByText("立即开始");
        Log.i(TAG, "findTxtClick: " + txt + ", " + nodes.size() + ", " + nodes);
        if (nodes == null || nodes.isEmpty()) {
            return;
        }
        Log.i(TAG, "findTxtClick: " + txt + ", " + nodes.size() + ", " + nodes);
        for (AccessibilityNodeInfo node : nodes) {
            node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
        }
        // 回收节点实例来重用
        if (eventNode != null) {
            eventNode.recycle();

原文地址:https://blog.csdn.net/guodashen007/article/details/142847129

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!