搜尋

首頁  >  問答  >  主體

同樣一句程式碼,為何在不同版本的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() {}
  
}

phpcn_u1582phpcn_u15822711 天前1027

全部回覆(2)我來回復

  • ringa_lee

    ringa_lee2017-06-17 09:18:14

    應該不是你程式碼的問題,各家的UI System魔改了很多東西,無法得知真實狀況。

    回覆
    0
  • 为情所困

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

    謝邀。
    沒玩過AccessibilityService服務,我想說:
    1、要開權限嗎?先上權限管理裡面看看權限開了沒。
    2、同樓上,有可能是ROM的問題。

    回覆
    0
  • 取消回覆