如何触发onActivityResult

时间:2017-01-12 03:43:46

标签: android google-play-games

我正在实现buttonclicker的修改版本 - 多人安卓游戏的通用示例。

玩家可以选择快速游戏"其中寻找多人游戏的玩家随机匹配。我希望玩家等待30秒,如果找不到匹配的玩家,则要求玩家玩电脑。

相关代码:

<div id="grandParent">
  <div id="parent">
    <div class="children"></div>
    <div class="children"></div>
    <div class="children"></div>
  </div>
</div>

<div id="reference"></div>

我认为实现这一目标的最佳方法是在30秒结束时触发 @Override public void onActivityResult(int requestCode, int responseCode, Intent intent) { super.onActivityResult(requestCode, responseCode, intent); switch (requestCode) { ... ... case RC_WAITING_ROOM: if (responseCode == Activity.RESULT_OK) { startGame(true); mSYGameOn = -1; } else if (responseCode == GamesActivityResultCodes.RESULT_LEFT_ROOM) { leaveRoom(); } else if (responseCode == Activity.RESULT_CANCELED) { // The code that I want to execute leaveRoom(); gotoMyPlayWithComputerCode() } break; } super.onActivityResult(requestCode, responseCode, intent); } ,然后执行我的自定义代码。

快速游戏叫做:

onActivityResult

现在,QuickGame的代码如下所示。代码的 @JavascriptInterface public void multiButtonFunction (String typeButton) { Intent intent; switch (typeButton) { ... ... case "button_quick_game": // user wants to play against a random opponent right now startQuickGame(); break; } } 部分是我添加到触发Handler的部分,它将退出快速游戏界面,然后转到我的自定义代码。:

onActivityResult

可以看出,我尝试了 void startQuickGame() { final int MIN_OPPONENTS = 1, MAX_OPPONENTS = 1; Bundle autoMatchCriteria = RoomConfig.createAutoMatchCriteria(MIN_OPPONENTS, MAX_OPPONENTS, 0); RoomConfig.Builder rtmConfigBuilder = RoomConfig.builder(this); rtmConfigBuilder.setMessageReceivedListener(this); rtmConfigBuilder.setRoomStatusUpdateListener(this); rtmConfigBuilder.setAutoMatchCriteria(autoMatchCriteria); keepScreenOn(); resetGameVars(); mSYGameOn=1; Games.RealTimeMultiplayer.create(mGoogleApiClient, rtmConfigBuilder.build()); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if (mSYGameOn>0) { setResult(Activity.RESULT_CANCELED, getIntent()); } } }, 10000); } ,但这不起作用,因为setResult没有通过它触发。我做错了什么还是有其他方法可以做同样的事情。

任何帮助都将不胜感激。

感谢

1 个答案:

答案 0 :(得分:0)

一个非常简单的答案。处理程序代码应为:

handler.postDelayed(new Runnable()
        {
            @Override
            public void run() {
                if (mSYGameOn>0) {
                    finishActivity(RC_WAITING_ROOM);
                }
            }
        }, 30000);

这会触发onActivityResult()并将房间视为已取消,退出等候室。

文档here