Ich habe einen AccessibilityService geschrieben, um WeChat zu steuern. Im weiteren Verlauf stieß ich jedoch auf die folgende Situation: Einige Codes liefen auf einem Android 4.4-Computer (Telefon A, Huawei Honor 6+, Android 4.4) und auf einem Android 7.0-Computer (Telefon B, Huawei P9). Es ergeben sich also 2 Probleme.
1. Führen Sie den AccessibilityService-Code auf dem Mobiltelefon aus, der die folgenden zwei Zeilen enthält:
Log.d(TAG, "获取事件-->Log.d" + event); Log.w(TAG, "获取事件-->Log.w" + event);
Auf Mobiltelefon A kann LogCat zwei Protokolle anzeigen, auf Mobiltelefon B jedoch nur ein Protokoll.
2. Beim Abrufen des Fensterknotens:
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow(); if(nodeInfo == null) { Log.w(TAG, "rootWindow为空"); return ; }
Auf Mobiltelefon A (Huawei Honor 6+, Android 4.4) können die Knoteninformationen von WeChat (com.tencent.mm) abgerufen werden, auf Mobiltelefon B (Huawei P9, Android 7.0) jedoch die Systemschnittstelle (ui. laucher) wird angezeigt) Knoteninformationen. Sehr verwirrt.
Alle Codes lauten wie folgt:
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的问题。