Google 播放服务 API 代码在 activity 之外?

Google Play Services API code outside of an activity?

在应用程序中实施 Google Play 服务 Api 时。所有文档和教程都有从 activity.

调用的所有代码

我想把它分解成更小的 classes,我在 activity 中调用它们。

这是不好的做法吗?如果没有,我怎样才能让它在非 Activity class 中工作?

想把它分解成更小的 classed,我改为调用 activity.

您是说 Fragments(您应该使用的)吗?或者另一种类型的 class?

在扩展 Fragment 的 class 内部,只需调用 getActivity()getSupportActivity() 即可使用需要 Context 的代码,或者必须从 Activity.

调用

如果这是不扩展 Fragment 的代码,那么您需要在其中添加一个 Context 变量。示例构造函数(args 代表您可能需要传入的任何其他对象):

public MyClass(Object args, Context context) { ... mContext = context; }

因此,当您在 Activity 中构建对象时,您将编写:

MyClass foo = new MyClass(args, this);

然后,当您想调用 Activity 特定代码时,您将调用: mContext.activitySpecificCode();

如果这些 classes 在创建新的 Activity 时仍然存在,您将不得不替换旧的上下文。上下文对象仅对它所取自的特定 Activity 的特定实例有效。

让您的代码在不对方法调用进行硬编码的情况下参与 activity 生命周期的正确方法是使用片段。

在 GoogleApiClient 中,我们在 GoogleApiClient.Builder 上确实有 enableAutoManage() 方法,它启用 Google Play 服务代码来为您完成大部分管理工作。如果您的应用支持一次使用 GoogleApiClient 的单个 Google 帐户,则可以使用此方法。我们计划很快发布一个展示此功能的示例。

您应该知道,我们将很快修复自动管理功能中的一个错误,该错误会提示应用程序用户在第一次拒绝 OAuth 同意时进行两次。如果你现在实施这个,当你选择更新的 Google Play 服务客户端库时,修复将是免费的。