如何解决在来自无障碍服务的另一个应用上显示 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 举报,一经查实,本站将立刻删除。