如何在活动之间传递游戏中心数据?

时间:2013-05-18 11:24:51

标签: android

好吧,我正在Android中实现新的游戏中心,并且有一个我不理解的概念。

我有一个扩展BaseGameActivity(https://developers.google.com/games/services/android/init)的类,所以它是管理成就,排行榜,Google +登录等的人。 我需要另一个类才能从该活动访问游戏中心数据(解锁成就,排行榜等),但不会从扩展的BaseGameActivity类调用此类。

他们如何沟通?

结构是这样的(意思是“ - >”它开始其他活动)

A(扩展BaseGameActivity) - > B - > C(需要与A的游戏中心通信)

我已经阅读了google的示例(TypeANumber),但是它使用了一个Listener进行通信,当你需要与之通信的类是你正在开始的那个类时,这很容易,但是对于我的结构来说并不容易。

有什么想法吗?

由于

4 个答案:

答案 0 :(得分:5)

我认为你有3个选择:

  1. 为每个需要它的Activity创建一个GamesClient,但是你必须为每个活动调用connect(),这需要时间。在第一次连接之后,其他的更快(几百毫秒)
  2. 创建自己的Application类并将其用作GamesClient.Builder的上下文,并将GamesClient对象存储在Application类中。我测试了它,它的工作原理。现在,我知道这样做是不鼓励的(因为它违反了Android的理念),但似乎很多人更喜欢创建自己的应用程序类并将数据存储到其中,而不是捆绑数据并将它们从一个活动传递到另一个活动。它的主要优点是你不需要修改很多东西就可以使它适用于你的情况(在我的情况下)。
  3. 使用Fragment类而不是Activity类,并使用拥有GamesClient对象的主Activity(在这种情况下,您的C类将能够与A类通信)。就像你提到的例子一样,只有一个Activity继承自Google示例的BaseGameActivity(包含GamesClient实例),其余只是Fragment类(每个Fragment都是一个屏幕)。

答案 1 :(得分:1)

在游戏中的多个屏幕之间共享GamesClient的最简单方法是使用Fragments,我试图在TypeANumber示例中说明。

也就是说,如果您仍希望拥有多个活动,则每个活动必须管理自己的 GamesClient对象,因为GamesClient与特定活动相关联。因此,如果您正在使用示例代码,那么每个Activity都必须从BaseGameActivity派生,并且每个Activity都将获得onSignInSucceeded()。在每个中,您可以使用getGamesClient()来获取 Activity的GamesClient对象。

答案 2 :(得分:0)

如何将需要共享的所有数据封装到单个对象中,例如

class SharedData {
    public String aString;
    public double aDouble;
    // etc
    public static SharedData globalInstance = new SharedData();
}

然后您的应用的所有部分都可以通过SharedData.globalInstance访问。

答案 3 :(得分:0)

只是想法......我没有看过这些代码,所以请用盐鲱鱼来对待它。

你可以封装在一个parcel / serializable中,然后在需要它的每个活动中使用set / getparceable吗?我建议传递一个界面,但不确定没有查看代码是多么容易

或者,您可以将游戏客户端逻辑包装在可以与每个活动交互的服务中吗?