我正在使用辅助功能服务在屏幕上找到一个按钮并单击它,但由于某种原因,我收到以下错误:
java.lang.IllegalStateException: Cannot perform this action on a not sealed instance.
at android.view.accessibility.AccessibilityNodeInfo.enforceSealed(AccessibilityNodeInfo.java:3046)
at android.view.accessibility.AccessibilityNodeInfo.findAccessibilityNodeInfosByText(AccessibilityNodeInfo.java:1529)
at com.myapp.adapters.Adapter_Click$11.run(Adapter_Click.java:1874)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Method.java:-2)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
它指的是:
List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText("Accept".toLowerCase());
然后我用它来点击按钮:
if (view.performAction(AccessibilityNodeInfo.ACTION_CLICK))
{
Log.e(TAG, "Button clicked");
}
在我刚刚更新到AndroidX之前,去年我没有看到任何问题。有没有办法在尝试点击之前检查它是否是密封的实例?我甚至试图将它包装在try / catch中,它仍然会崩溃我的应用程序。
完成密封以使节点不可变。当服务在回收后使用节点时,通常会出现这种异常。