【问题标题】:Play Game Services - BaseGameUtils - android.view.WindowManager$BadTokenException玩游戏服务 - BaseGameUtils - android.view.WindowManager$BadTokenException
【发布时间】:2017-07-20 19:51:30
【问题描述】:

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

它发生在 showActivityResultError() 中,它会针对与 Google 的 Play 游戏服务的连接问题显示错误对话框。我测试了默认情况(“没有有意义的 Activity 响应代码,因此生成默认的 Google Play 服务对话框”)并且在我的手机上运行良好。

有一件事 - GooglePlayServicesUtil.isGooglePlayServicesAvailableGooglePlayServicesUtil.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>

【问题讨论】:

  • 基于此相关的 SO post,您可以将 GoogleApiAvailability 用于 isGooglePlayServicesAvailablegetErrorDialog。 AFAIK,您应该使用games package 来获取成就和排行榜。希望这会有所帮助。
  • 谢谢,我会尝试进行这些更改,看看效果如何。崩溃是相对罕见的 WRT 每日会话数,但持续存在。

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


【解决方案1】:

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

解决方法很简单 if(!activity.isFinishing()) 打电话之前 Dialog.show();

就我而言,它是之前 errorDialog.show(); 在方法showActivityResultError()BaseGameUtils.java

就是这样。每周有几个例外情况消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 2017-11-28
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多