Android Firebase проверяет, закрывает ли пользователь приложение или отключается - PullRequest
0 голосов
/ 03 сентября 2018

У меня полноценная многопользовательская игра (викторина). У меня есть таймер для игры (заканчивается через 90 секунд), и у меня есть метод отступления (если игрок нажимает кнопку «Назад», он проигрывает и получает 0).

Моя проблема в том, что если один из двух игроков закроет приложение (или даже при повторной обработке), как отправить сообщение, что игра окончена, и перейти к выигрышной активности? Мне полезно показать код создания игры:

private void initializeGameModel() {
        mGameModel = new GameModel();
        mGameModel.setId(mGameWaitModel.getId());
        mGameModel.setGameMaster(getPlayerModel(true));
        mGameModel.setGameSlave(getPlayerModel(false));
        mGameModel.setGenerateNewQuestion(true);
        mGameModel.setDidGameEnd(false);
        LOGD(TAG, "Game Model initialized");
    }

и инициализация firebase:

private void initializeFirebase() {
        mGameFirebase = FirebaseDatabase.getInstance()
                .getReferenceFromUrl(Constants.FIREBASE_BASE_URL + Constants.FIREBASE_TEST_PATH + Constants.FIREBASE_GAME_ACTIVE_PATH + mGameWaitModel.getId());
        mGameFirebase.setValue(mGameModel);
        mGameFirebase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mGameModel = dataSnapshot.getValue(GameModel.class);
                if (mGameModel == null) {
                    return;
                }
                try {
                    if (mGameModel.isGenerateNewQuestion()) {
                        mGameModel.getGameMaster().setDidPlayerAnswer(false);
                        mGameModel.getGameMaster().setPlayerAnswerCorrect(false);
                        mGameModel.getGameSlave().setDidPlayerAnswer(false);
                        mGameModel.getGameSlave().setPlayerAnswerCorrect(false);


                    }
                    if (isGameMaster() && mGameModel.isGenerateNewQuestion()) {
                        generateNewQuestion();
                        mGameModel.setGenerateNewQuestion(false);
                        mGameFirebase.setValue(mGameModel);
                        return;
                    }

На самом деле мне нужно, чтобы один из двух пользователей отступил, закрыл приложение (нажав кнопку «Домой») и завершил игру (для обоих пользователей) и использовал код для завершения игры.

Заранее благодарим за любую помощь и усилия!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете манипулировать с помощью:

onPause, onResume (нажатие кнопки «Домой»),

onClose и onDestroy (для обнаружения уничтожения / закрытия приложения),

onBackPressed (отступление двух пользователей)

0 голосов
/ 03 сентября 2018

Вы можете использовать функцию onPause или onDestroy, чтобы установить для атрибута DidGameEnd значение true в базе данных. Если вы добавите прослушиватель в атрибут DidGameEnd, то, если один из пользователей приостановит приложение или выйдет из приложения, вы сможете уведомить другого пользователя, так как вы измените атрибут в приложении других пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...