编程语言
首页 > 编程语言> > “无法在未密封的实例上执行此操作”java.lang.IllegalStateException异常

“无法在未密封的实例上执行此操作”java.lang.IllegalStateException异常

作者:互联网

随着Android AccessibilityService能够粘贴到其他应用程序EditText字段,但与浏览器测试域(模拟器默认浏览器或三星deault浏览器),它不工作,抛出错误:

Cannot perform this action on a not sealed instance.

在android chrome浏览器中有一些singnup文本字段,它的工作但不适用于所有文本字段.

 @Override
public void onAccessibilityEvent(AccessibilityEvent event) {

    AccessibilityNodeInfo source = event.getSource();
    if (source != null && ( event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED ) ) {
            // || event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED ) &&
            //event.getClassName().equals("android.widget.EditText")
            //) {
        ctx = getApplicationContext();
        ClipboardManager clipboard = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("label", "XYZ");
        clipboard.setPrimaryClip(clip);
        source.performAction(AccessibilityNodeInfo.ACTION_PASTE); 
        //Not Working, always return false.

        //Tried with other options
        Bundle argumentsTest = new Bundle();
        argumentsTest.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "Bundle Test Data");
        source.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT,argumentsTest )
        // Not Working, throw java.lang.IllegalStateException exception
        //Message: "Cannot perform this action on a not sealed instance"
    }
}   

解决方法:

我并不相信你正试图做你认为你想做的事情.

当您设置accessibilityNodeInfo的“text”时,您正在查找的是该对象的text属性,因为它与您的辅助功能服务有关.这并不意味着您正在更改accessibilityNodeInfo对象引用的EditText框的文本.当您的辅助功能服务获取此对象时,这两个对象彼此完全分离.即使您的代码成功运行,您也无法获得预期的结果.现在,至于为什么你不能执行这个动作,知道这一点应该是显而易见的.对于能够修改其拥有的节点的辅助功能服务,实际上没有意义.因此它们变得密封(将其视为常量的运行时执行).可访问性节点在其生命周期的各个点处变得密封和未密封.可以访问未密封节点信息的框架部分是View类和私有API.任何与辅助功能服务相关的任务都将处理密封的只读实例.

至于为什么你的原始解决方案不起作用,我相信我们没有足够的信息. “ACTION_PASTE”方法(近似)是正确的方法,但是,在使用Web浏览器时,存在大量问题.浏览器版本,Android版本,设备版本,网站等都发挥作用.特别是如果您的设置足够大,不能使用新的WebView(纯铬webview,而不是基于过时版本的WebKit的奇怪嵌入式移动WebView的旧方法,现在永远不会更新).我建议您使用最新的Nexus设备测试您的代码,至少使用Android 5.0并查看您的代码是否有效.如果您无法执行此操作,请报告您的设置的版本信息.如果你已经在哪个网站上?

标签:java,android,android-service,accessibilityservice
来源: https://codeday.me/bug/20190516/1116840.html