如果我使用tbmp骨架但是tbmp骨架不是主要活动,我该怎么做才能正确接收基于回合的匹配更新?

时间:2017-02-11 14:56:39

标签: java android android-intent

我试图使用tbmp骨架,但我不使用它作为主要活动。一切似乎都有效,除非在测试期间我尝试接受邀请并进入下一个转弯屏幕以执行转弯1(第二回合)。在onActivityResult中(在辅助Activity中我以Intent开头)行:

TurnBasedMatch match = data.getParcelableExtra(Multiplayer.EXTRA_TURN_BASED_MATCH);

在解组TurnBasedMatchEntity时触发BadParcelableException:ClassNotFoundException

网站上之前提出的关于“在意图中传递TurnBasedMatch时出现BadParcelablException”的问题没有提供任何有用的线索。我已经在代码中尝试了二十多种变体作为alphas并进行了测试。我得出结论,问题是我没有将tbmp骨架设置为主要活动。有没有办法绕过这个问题,不需要我尝试将我的正常主要活动与Tbmp中的SkeletonActivity结合起来?否则,作为次要活动的tbmp似乎工作正常。它自动登录谷歌+,我可以“开始比赛”,“检查游戏”,“退出”,并开始一个自动游戏。由“开始匹配”创建的游戏允许首发添加到当前字符串并单击“完成”结果可以在“检查游戏”中看到的游戏中。选择对手(我的其他gmail测试帐户)有效。另一个测试gmail帐户可以在支票游戏中看到游戏并且可以接受邀请。如果其他gmail游戏进程处于活动状态并且已登录,那么当第一个游戏进程发送邀请时,我会在第二个游戏进程中看到吐司,该进程会通知收到邀请。但是,假设在onStartMatchClicked中使用了getSelectOpponentsIntent,则无法进入Turn 1。用createMatch替换getSelectOpponentsIntent似乎导致本质上是自动匹配。

如果我使用自动匹配在第一个测试帐户中启动游戏,并在第二个测试帐户中随后使用自动匹配,那么在第二个帐户中我会转到第1个但是同样的问题再次出现,因为第一个帐户可以从来没有真正看到或使转弯2移动。

此网站还有其他4个问题可以解决这个问题。 “如何从Google Play服务通知中检测意图”,“如何确定从Google Play回合制通知中选择的匹配”,“TBMP Skeleton:为什么onTurnBasedMatchReceived和onInvitationReceived都没有在物理设备上调用”,以及(外围)“ TBMP Skeleton - 如何覆盖通知事件“。我的帐户已启用同步功能,Google Play游戏的通知已启用。添加另一个额外的意图并搜索它似乎不起作用。打开和关闭registerMatchUpdateListener和registerInvitationListener不会产生有益的结果。我认为当你将tbmp骨架转换为不是主要活动时,知道对tbmp骨架所需的更改会有所帮助。在我看来,这是Java代码的一个常见问题,你经常无法将代码块从一个地方移动到另一个地方,因为如果你这样做会破坏它。

我的另一个行动方案是1)在仅限alpha的Google Play帐户中设置tbmp骨架,并查看当SkeletonActivity是主要活动时问题是否复制,2)将SkeletonActivity移植到我的正常主要活动上,3)删除tbmp骨架并尝试使用github或programcreek的另一个例子

3 个答案:

答案 0 :(得分:1)

如果您通过通知收到邀请/匹配更新,并且只是没有让您的听众通知,请确保您记得注册听众!我花了太长时间在这上面,只是忘了注册听众(是积极的,我太lol)。

{{1}}

答案 1 :(得分:1)

请勿使用下面给出的android github示例中的接受邀请代码:

<label>Rent</label> <input style="font-size:10px;width:80px;text-align:right" id="values" type="text" onkeyup="addComma(this);">

使用以下方法获取匹配值:

TurnBasedMatch match = data.getParcelableExtra(Multiplayer.EXTRA_TURN_BASED_MATCH);

并使用事件侦听器获取比赛信息,并进一步进行轮次。

如果您无法使用上述方法,则在发布版本崩溃并在Play商店中发布后返回相同的异常的情况下,调试该应用可以正常进行。

注册监听器不是必需的,监听器是已贬值的方法,而是注册回调以获取邀请ID。

答案 2 :(得分:0)

将此行添加到您的proguard配置中:

 -keep class  com.google.android.gms.games.multiplayer.turnbased.TurnBasedMatchEntity

请考虑为邀请添加此内容:

 -keep class com.google.android.gms.games.multiplayer.InvitationEntity