我寫了一個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() {}
}
應該不是你程式碼的問題,各家的UI System魔改了很多東西,無法得知真實狀況。
謝邀。
沒玩過AccessibilityService服務,我想說:
1、要開權限嗎?先上權限管理裡面看看權限開了沒。
2、同樓上,有可能是ROM的問題。