在来自无障碍服务的另一个应用上显示 Toast

问题描述

我处理了几个让我抓狂了将近一年的错误

我正在使用 Android 的 Accessibility Services 执行自动化任务、点击按钮、发出自定义手势以及通过 Toast 在屏幕上显示反馈。

在大多数情况下,它就像一个魅力。但是我遇到了至少两个目前无法真正解决的恼人错误

一个

Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@5ff054e is not valid; is your activity running?
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:679)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
   at android.widget.Toast$TN.handleShow(Toast.java:467)
   at android.widget.Toast$TN$2.handleMessage(Toast.java:350)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6138)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

因此,我进行了一些研究,并提出了以下资源:http://dimitar.me/android-displaying-dialogs-from-background-threads,其中说明我们需要同步检查活动是否未完成,然后才能实际显示一些 Toast /在它上面的对话框。

事情是:当我显示在另一个应用程序的活动之上时,我自然无法控制它。有时我在没有更多信息的情况下获得了上面的回溯,导致崩溃。我什至无法处理异常。

我在那里想出了额外的线索:android.view.WindowManager$BadTokenException: Unable to add window -- at Toast

我们被告知,该问题在 Android 8.0 之后众所周知并已修复。没关系,反正我只是通过 Android 7.0 得到这些错误

现在我有第二个问题,针对 Android 9(可能是其他版本),但我无法真正重现它们:

Fatal Exception: java.lang.IllegalStateException: View android.widget.LinearLayout{59b180e V.E...... ......ID 0,0-640,296} has already been added to the window manager.
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:328)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
   at android.widget.Toast$TN.handleShow(Toast.java:499)
   at android.widget.Toast$TN$1.handleMessage(Toast.java:403)
   at android.os.Handler.dispatchMessage(Handler.java:106)
   at android.os.Looper.loop(Looper.java:193)
   at android.app.ActivityThread.main(ActivityThread.java:6702)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)

我很确定这也是因为我在我无法控制的活动之上显示了一些 Toast。

我的问题是:这些错误是由于 Android 还是我在任何地方做错了什么?我不确定在我这边显示代码是否相关,因为我自己的代码没有来自我得到的回溯。

更一般地说:是否可以在您无法控制的活动/应用之上显示一些 Toast?

你们有什么建议?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...