如何触发onActivityResult
How to trigger onActivityResult
我正在实施 buttonclicker 的修改版本 - 多人 android 游戏的通用示例。
玩家有进入“快游戏”的选项,其中寻求多人游戏的玩家是随机匹配的。我想让玩家等待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);
}
我认为实现此目的的最佳方法是在 30 秒结束时触发 onActivityResult
,然后执行我的自定义代码。
快游戏调用者:
@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;
}
}
现在QuickGame的代码如下。 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
但这不起作用,因为 onActivityResult
没有被触发。我是做错了什么还是有其他方法可以做同样的事情。
如有任何帮助,我们将不胜感激。
谢谢
一个非常简单的答案。处理程序代码应为:
handler.postDelayed(new Runnable()
{
@Override
public void run() {
if (mSYGameOn>0) {
finishActivity(RC_WAITING_ROOM);
}
}
}, 30000);
这会触发 onActivityResult()
并将房间视为已取消,退出等候室。
文档here
我正在实施 buttonclicker 的修改版本 - 多人 android 游戏的通用示例。
玩家有进入“快游戏”的选项,其中寻求多人游戏的玩家是随机匹配的。我想让玩家等待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);
}
我认为实现此目的的最佳方法是在 30 秒结束时触发 onActivityResult
,然后执行我的自定义代码。
快游戏调用者:
@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;
}
}
现在QuickGame的代码如下。 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
但这不起作用,因为 onActivityResult
没有被触发。我是做错了什么还是有其他方法可以做同样的事情。
如有任何帮助,我们将不胜感激。
谢谢
一个非常简单的答案。处理程序代码应为:
handler.postDelayed(new Runnable()
{
@Override
public void run() {
if (mSYGameOn>0) {
finishActivity(RC_WAITING_ROOM);
}
}
}, 30000);
这会触发 onActivityResult()
并将房间视为已取消,退出等候室。
文档here