Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测';后退键';从排行榜中按?(安卓)_Android_Google Play Services_Leaderboard_Activity Lifecycle - Fatal编程技术网

Android 检测';后退键';从排行榜中按?(安卓)

Android 检测';后退键';从排行榜中按?(安卓),android,google-play-services,leaderboard,activity-lifecycle,Android,Google Play Services,Leaderboard,Activity Lifecycle,我在Android游戏中设置了一个排行榜,它似乎运行得很好 在主菜单中,玩家可以按“显示分数”按钮查看排行榜,当玩家的游戏结束时(无论是通过牺牲自己的生命还是完成游戏),玩家可以选择提交分数。如果按此键,则提交分数并显示排行榜以显示新分数 我已经设置了我的应用程序,如果它被暂时中断,它将返回到当前场景(菜单、游戏等) 但是,我不知道如何“知道”排行榜是否正在向用户显示。(我知道如何设置,但不知道退出排行榜时如何“取消设置”) 我设置了一个变量,该变量确定在调用“onSignedSucceed()

我在Android游戏中设置了一个排行榜,它似乎运行得很好

在主菜单中,玩家可以按“显示分数”按钮查看排行榜,当玩家的游戏结束时(无论是通过牺牲自己的生命还是完成游戏),玩家可以选择提交分数。如果按此键,则提交分数并显示排行榜以显示新分数

我已经设置了我的应用程序,如果它被暂时中断,它将返回到当前场景(菜单、游戏等)

但是,我不知道如何“知道”排行榜是否正在向用户显示。(我知道如何设置,但不知道退出排行榜时如何“取消设置”)

我设置了一个变量,该变量确定在调用“onSignedSucceed()”时我的应用程序应采取的操作,如下所示:

@Override
public void onSignInSucceeded() {

    //If the flag is set, then display the leaderboard
    if (signInAction==SHOW_LEADERBOARD){
        displayLeaderBoard();
    }

    //If the flag is set, then display the submit score
    else if (signInAction==SUBMITSCORE){
        submitScore();
    }

    //Otherwise, reset the flag and take no action
    else {signInAction=NO_ACTION;}
}
然而,发生的情况是,假设用户按下“显示分数”按钮,我们将登录设置为显示排行榜,然后连接。将显示排行榜

然后用户按下后退键并返回应用程序。如果应用程序现在被中断,将调用OnSignensAccepted(),并再次显示排行榜。(但当应用程序被中断时,它没有被显示,因此这会减少用户体验)

如果用户按下“后退”键退出排行榜,我就可以将签名设置回“不采取行动”——我该怎么做

仅为补充信息,我的应用程序是一个单一的活动,并使用自定义场景管理器,因此在我的活动类中,我可以按back press做一些事情,如:

If (CurrentScene = mainMenu){
    //Do Something Here
}
但是,排行榜不是自定义场景。所以我不知道该怎么做


我想这个问题可以最好地概括为“我怎样才能检测到Google Play排行榜上的后退键?”?(当用户退出并返回到应用程序中时)–如果您需要任何帮助,我们将不胜感激。

您应该能够使用onActivityResult()清除登录。您需要检查请求代码,可能还需要检查结果代码,具体取决于您的应用程序

一些可能的结果将是:

  • Activity.RESULT\u已取消(这是您感兴趣的)

  • GamesActivityResultCodes.RESULT\u需要重新连接

但你最好还是用同样的方法来处理它们

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
    //just returned from displaying the leaderboard
    if(requestCode==REQUEST_LEADERBOARD)
        {
        signInAction=NO_ACTION;
        return;
        }

    super.onActivityResult(requestCode, resultCode, data);
    }

为什么不直接使用
onPause()
onResume()
?这正是你想要实现的,听起来像是,除非我误解了。嗨@kcopock,你能详细说明一下吗?当我的应用程序运行/恢复时,如果用户已登录Play Services,则会调用OnSignanceEded(),如果SignationAction仍设置为SHOW_Leadboard,则会触发DisplayLeadboard();-所以我需要说“用户已经退出排行榜,所以将Signationation设置为NO_ACTION”,这样就不会发生这种情况-希望这是有意义的:-)我可能误解了你的应用程序的流程。但是,如果你说你需要知道排行榜是否显示,那么无论何时设置该标志(例如signInAction=SHOW_Leadboard),你都可以在活动中的
onResume()
中将其清除回NO_ACTION。启动排行榜将暂停您的活动。您可以使用该信息表示,每当您的活动恢复时(
onResume()
),您显然不再处于该状态。因此,用户单击“显示排行榜”,您就可以将登录设置为显示排行榜。将调用onPause()。在onResume()中,只需将SignenAction设置为NO_ACTION。是的,但这将意味着重新启动时不会显示排行榜,我需要的是,如果在应用程序暂停时显示排行榜,则排行榜将在恢复时显示。如果应用程序暂停时没有显示,则不显示:-)回答得好@BrianDeWolff-谢谢。我已经实现了它,它工作得很好,我实际上可以简化它,因为我只启动一个活动,我不需要检查请求代码,但我做了,只是为了安全起见-谢谢!!