玩游戏服务 - BaseGameUtils - android.view.WindowManager $ BadTokenException

时间:2017-07-20 19:51:31

标签: android exception dialog google-play-services android-windowmanager

我已经有这个问题了一段时间,并且随着下载量的增加而增加。

它出现在 showActivityResultError()中,这会为Google的Play游戏服务带来连接问题的错误对话。我测试了默认情况(“没有有意义的活动响应代码,因此生成默认的Google Play服务对话框”),这在我的手机上运行正常。

有一件事 - GooglePlayServicesUtil.isGooglePlayServicesAvailable GooglePlayServicesUtil.getErrorDialog 显示为折旧,但我找不到任何更新 - 每个人都使用BaseGameUtils作为其排行榜/成就无论如何?

在Android版本 4.2 / 4.4 / 5.0 / 5.1 / 6.0 上发生,因此没有真正的线索。

顶级设备: Galaxy Note4(tre3g)/ Galaxy Grand Neo Plus(grandneove3g)/ Galaxy Note3(ha3g)/ Galaxy J7(2016)(j7xelte)/ Galaxy Tab4 7.0(degaswifiue)/ Galaxy Note4(trlte) / Galaxy Grand Prime(grandprimeve3g)/ Galaxy S6 Edge(zerolte)

可以在此处查看BaseGameUtils的源代码: https://github.com/playgameservices/android-basic-samples/blob/master/BasicSamples/libraries/BaseGameUtils/src/main/java/com/google/example/games/basegameutils/BaseGameUtils.java

干杯!

java.lang.RuntimeException: 
  at android.app.ActivityThread.deliverResults(ActivityThread.java:4019)
  at android.app.ActivityThread.handleSendResult(ActivityThread.java:4062)
  at android.app.ActivityThread.access$1400(ActivityThread.java:177)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:135)
  at android.app.ActivityThread.main(ActivityThread.java:5930)
  at java.lang.reflect.Method.invoke(Method.java:0)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Caused by: android.view.WindowManager$BadTokenException: 
  at android.view.ViewRootImpl.setView(ViewRootImpl.java:574)
  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:282)
  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
  at android.app.Dialog.show(Dialog.java:298)
  at com.google.example.games.basegameutils.BaseGameUtils.showActivityResultError(BaseGameUtils.java:154)
  at <my game here>

1 个答案:

答案 0 :(得分:0)

我终于找到了答案,这是一个非常简单的修复方法。实际上,当Activity正在完成时调用Dialog.show()。这里描述得很好: http://dimitar.me/android-displaying-dialogs-from-background-threads/

修复只是放 if(!activity.isFinishing()) 在打电话之前 Dialog.show();

在我的情况下,它是以前的 errorDialog.show(); 方法showActivityResultError()BaseGameUtils.java

是的,它就是它。一周的例外情况已经消失。