Android - 如何检查成就是否已解锁

Mar*_*oni 2 android achievements google-play-services

我在游戏中有一些增量成就,我想检查其中一个是否已经解锁.我怎样才能做到这一点?

原来我使用这种方法:

getGamesClient().incrementAchievement(achievement, increment);
Run Code Online (Sandbox Code Playgroud)

然后我试着用这个:

mHelper.getGamesClient().incrementAchievementImmediate(new OnAchievementUpdatedListener()
{
    @Override
    public void onAchievementUpdated(int statusCode, String achievementId)
    {
        // TODO: Check if the achievement got unlocked
    }
}, achievement, increment);
Run Code Online (Sandbox Code Playgroud)

这是做我想要的正确方法吗?有没有更好的办法?

我的测试中只有两个statusCode值.

值:5 = STATUS_NETWORK_ERROR_OPERATION_DEFERRED

值:0 = STATUS_OK

有人可以帮我弄这个吗?

谢谢

Oge*_*gen 9

声明这个内部类:

class AchievementClass implements ResultCallback<Achievements.LoadAchievementsResult> {

    @Override
    public void onResult(LoadAchievementsResult arg0) {
        Achievement ach;
        AchievementBuffer aBuffer = arg0.getAchievements();
        Iterator<Achievement> aIterator = aBuffer.iterator();

        while (aIterator.hasNext()) {
            ach = aIterator.next();
            if ("The Achievement Id you are checking".equals(ach.getAchievementId())) {
                if (ach.getState() == Achievement.STATE_UNLOCKED) {
                    // it is unlocked
                } else {
                    //it is not unlocked
                }
                aBuffer.close();
                break;
            }
        }
    }       
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

Games.Achievements.load(ApiClient, false).setResultCallback(new AchievementClass());
Run Code Online (Sandbox Code Playgroud)

这将获得当前登录的玩家的成就数据,完成所有成就,当它达到您所关注的成就时,它将检查它是否已解锁.