登陆

同样一句代码,为何在不同版本的Android手机上显示不同结果

我编写了一个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() {}
  
}

# Android
phpcn_u1582phpcn_u15821591 天前433 次浏览

全部回复(2)我要回复

  • ringa_lee

    ringa_lee2017-06-17 09:18:14

    应该不是你代码的问题,各家的UI System魔改了很多东西,无法得知真实情况。

    回复
    0
  • 为情所困

    为情所困2017-06-17 09:18:14

    谢邀。
    没玩过AccessibilityService服务,我想说:
    1、要开权限吗?先上权限管理里面看看权限开了没。
    2、同楼上,有可能是ROM的问题。

    回复
    0
  • 取消回复发送