问题描述
我编写了一个AccessibilityService服务,用以控制微信。但在随后的过程中遇到了如下情况:有些代码在Android 4.4的机器上(手机A,华为荣耀6+, Android 4.4)与在Android 7.0的机器上(手机B,华为P9),跑得的结果不一样,于是产生问题2个。
1、在手机上手机运行AccessibilityService代码,其中有以下两行:
Log.d(TAG, '获取事件-->Log.d' + event);Log.w(TAG, '获取事件-->Log.w' + event);
在手机A上,LogCat能显示两条Log,而在手机B却只能显示1条Log。
2、获取窗口节点时:
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();if(nodeInfo == null) { Log.w(TAG, 'rootWindow为空'); return ;}
在手机A(华为荣耀6+, Android 4.4)上,能获取到微信(com.tencent.mm) 的节点信息,而在手机B(华为P9,Android 7.0)却显示了系统界面(ui.laucher)的节点信息。很疑惑。
全部代码如下:
public class AcceServ extends AccessibilityService { private String TAG = getClass().getSimpleName(); private boolean isFinish = false; private int index = 1; protected void onServiceConnected() {super.onServiceConnected();Log.d(TAG, 'onServiceConnected!' );Log.w(TAG, 'onServiceConnected!' );Toast.makeText(AcceServ.this,'连接服务成功。请开启AcceServ', Toast.LENGTH_LONG).show();}@Override public void onAccessibilityEvent(AccessibilityEvent event) {final int eventType = event.getEventType();Log.d(TAG, '获取事件-->' + event);Log.w(TAG, '获取事件-->' + event);AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();if(nodeInfo == null) { Log.w(TAG, 'rootWindow为空'); return ;}do_some_thing();} @Override public void onInterrupt() {} }
问题解答
回答1:应该不是你代码的问题,各家的UI System魔改了很多东西,无法得知真实情况。
回答2:谢邀。没玩过AccessibilityService服务,我想说:1、要开权限吗?先上权限管理里面看看权限开了没。2、同楼上,有可能是ROM的问题。