AccessibilityService 报错

2020-07-11  本文已影响0人  cain07

1.AccessibilityNodeInfo.findAccessibilityNodeInfosByText(java.lang.String)' on a null object reference

 if (getRootInActiveWindow() == null) return;
        List<AccessibilityNodeInfo> tijiaodingdan = getRootInActiveWindow().findAccessibilityNodeInfosByText("订单");

分析 :当前页面应该是 没有 订单这个 词的 时候 报错 这一行 报错
解决:

 if (nodeInfo == null) return null;
        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(text);
        if (list == null || list.isEmpty()) {
            return null;
        }
        return list.get(0);

2.AccessibilityService 如何 拿到 列表 的 每一行 listview

node.getChild(position)//可以获取当前屏幕的显示的这几行

3.AccessibilityService 如何停止服务

调用disableSelf();方法辅助功能就会被关闭 这个方法在服务内部可以调用
如何在外部 停止呢?

在内部可以监听音量键 来关闭 服务

 @Override
    protected boolean onKeyEvent(KeyEvent event) {
        switch(event.getKeyCode()){
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                Log.e(TAG, "KEYCODE_VOLUME_DOWN");
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    disableSelf();
                }
                break;
            case KeyEvent.KEYCODE_VOLUME_UP:
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    disableSelf();
                }
                Log.e(TAG, "KEYCODE_VOLUME_UP");
                break;
        }
        return super.onKeyEvent(event);
    }

加上以后 没有 起作用?

解决

由于是对事件监听,所以android:accessibilityFlags=”flagRequestFilterKeyEvents”,同时注意,Android:accessibilityFlags不能使用默认的,android:canRequestFilterKeyEvents必须为true,默认的是false。

上一篇 下一篇

猜你喜欢

热点阅读