Google Fit是一个平台,使开发人员可以构建专注于用户适应性数据的应用程序。 Google提供的工具之一是适用于Android的Google Fit,可以在Google Play服务中打包获得。
正如Envato Tuts +概述文章中所讨论的,虽然Google Fit有许多不同的API,但本教程重点介绍如何使用Google Fit为传感器数据创建低功耗后台订阅。 我们探索了如何利用Google Play服务存储健身数据,以便以后可以访问它们。
Recording API与Sensors API的不同之处在于,实时传感器数据不会传递到Recording API,而是将数据在线保存以保存用户活动记录。 本教程包括一个示例项目,您可以从GitHub下载该项目。
1.项目设置
步骤1:设定开发人员控制台
要使用Google Fit,您需要创建OAuth 2.0客户端ID并通过Google Developer Console注册您的应用程序。 在有关Google Fit Sensors API的教程中,您可以找到有关如何设置Google Developer Console的详细说明。
步骤2:建立Android专案
在Google Developer Console中配置了用于身份验证的应用程序后,请使用您注册的包名称创建一个新的Android应用程序,该SDK的最低SDK为14, Activity
为空。
创建基本Android应用程序后,打开build.gradle文件,并将Google Play服务包含在依赖项节点下并同步您的应用程序。
compile 'com.google.android.gms:play-services-fitness:8.4.0'
现在,您应该可以在应用程序中包含必要的Google Play服务类。 在深入了解本教程的Java代码之前,请打开activity_main.xml并对其进行修改,以使其包含两个Button
项,这些项将用于演示Recording API的某些功能。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_show_subscriptions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Subscriptions"/>
<Button
android:id="@+id/btn_cancel_subscriptions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Cancel Subscriptions"/>
</LinearLayout>
运行您的应用程序时,用户界面将如下图所示。
要完成项目的设置,请打开MainActivity.java并实现以下回调及其必需的方法:
-
GoogleApiClient.ConnectionCallbacks
-
GoogleAPiClient.OnConnectionFailedListener
-
View.OnClickListener
您还需要为您的类添加成员变量,如下所示。
public class MainActivity extends AppCompatActivity implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
View.OnClickListener {
private Button mCancelSubscriptionsBtn;
private Button mShowSubscriptionsBtn;
private ResultCallback<Status> mSubscribeResultCallback;
private ResultCallback<Status> mCancelSubscriptionResultCallback;
private ResultCallback<ListSubscriptionsResult> mListSubscriptionsResultCallback;
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.e("RecordingAPI", "onConnected");
}
@Override
public void onConnectionSuspended(int i) {
Log.e("RecordingAPI", "onConnectionSuspended");
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e("RecordingAPI", "onConnectionFailed");
}
@Override
public void onClick(View v) {
}
}
2.初始化
在开始使用上面定义的回调和视图之前,需要进行初始化。 为此,我们创建了两个帮助程序方法,一个用于初始化视图,一个用于初始化onCreate()
中调用的回调。
initViews()
方法将Button
对象指向activity.xml中定义的项目,并为每个按钮设置一个OnClickListener
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initCallbacks();
}
private void initViews() {
mCancelSubscriptionsBtn = (Button) findViewById(R.id.btn_cancel_subscriptions);
mShowSubscriptionsBtn = (Button) findViewById(R.id.btn_show_subscriptions);
mCancelSubscriptionsBtn.setOnClickListener(this);
mShowSubscriptionsBtn.setOnClickListener(this);
}
在initCallbacks()
,事情变得更加有趣了。 每个回调用于Recording API的特定异步操作。 正如其名称所暗示的, mSubscribeResultCallback
当你第一次添加订阅的传感器被调用, mCancelSubscriptionResultCallback
是当你取消订阅调用, mListSubscriptionResultCallback
当你要求所有的订阅列表时使用。
在以下代码段中,与启动和停止预订有关的两个回调仅记录成功或失败。 mListSubscriptionResultCallback
接收订阅列表,并通过获取DataType
,然后获取与订阅关联的每个Field
,注销有关每个订阅的信息。
private void initCallbacks() {
mSubscribeResultCallback = new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
if (status.getStatusCode() == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) {
Log.e( "RecordingAPI", "Already subscribed to the Recording API");
} else {
Log.e("RecordingAPI", "Subscribed to the Recording API");
}
}
}
};
mCancelSubscriptionResultCallback = new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.e( "RecordingAPI", "Canceled subscriptions!");
} else {
// Subscription not removed
Log.e("RecordingAPI", "Failed to cancel subscriptions");
}
}
};
mListSubscriptionsResultCallback = new ResultCallback<ListSubscriptionsResult>() {
@Override
public void onResult(@NonNull ListSubscriptionsResult listSubscriptionsResult) {
for (Subscription subscription : listSubscriptionsResult.getSubscriptions()) {
DataType dataType = subscription.getDataType();
Log.e( "RecordingAPI", dataType.getName() );
for (Field field : dataType.getFields() ) {
Log.e( "RecordingAPI", field.toString() );
}
}
}
};
}
3.连接和控制订阅
现在,您已经为示例应用程序建立了通用框架,是时候通过连接到Google Play服务并请求订阅来包装所有内容。
在onCreate()
,您可以通过声明使用Fitness.RECORDING_API
,添加读取健身活动数据的范围并将其设置为在应用程序的生命周期中自动连接/断开连接,来初始化并连接到Google Play服务。
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.RECORDING_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addConnectionCallbacks(this)
.enableAutoManage(this, 0, this)
.build();
连接GoogleApiClient
后,您可以随时请求订阅。 对于本教程,我们订阅onConnected()
。 以下代码段显示了如何启动订阅以更改用户的步数,尽管您可以访问Google Fit支持的任何传感器。
如果由于较早的操作而预订已在运行,则回调将接收状态代码FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED
。
@Override
public void onConnected(@Nullable Bundle bundle) {
Fitness.RecordingApi.subscribe(mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA)
.setResultCallback(mSubscribeResultCallback);
}
有时可能需要请求订阅列表。 之前,您为这些操作创建了两个按钮。 在onClick()
方法中,检查被点击的按钮并执行相应的操作。
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn_cancel_subscriptions: {
cancelSubscriptions();
break;
}
case R.id.btn_show_subscriptions: {
showSubscriptions();
break;
}
}
}
如果showSubscriptions()
,则应用程序请求与Recording API关联的订阅列表。
private void showSubscriptions() {
Fitness.RecordingApi.listSubscriptions(mGoogleApiClient)
.setResultCallback(mListSubscriptionsResultCallback);
}
这将导致mListSubscriptionsResultCallback
注销所有已连接的订阅。 结果看起来像这样:
.../com.tutsplus.googlefitrecordingapi E/RecordingAPI: com.google.step_count.delta
.../com.tutsplus.googlefitrecordingapi E/RecordingAPI: steps(i)
取消订阅非常简单,如下所示。
private void cancelSubscriptions() {
Fitness.RecordingApi.unsubscribe(mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA)
.setResultCallback(mCancelSubscriptionResultCallback);
}
结论
现在,您应该对如何从Android应用程序连接到Google Fit以及如何使用Recording API有了基本的了解。 尽管目前看来还不多,但它确实为您存储有关用户身体活动的信息铺平了道路,以便您的应用程序中的其他Google Fit API可以访问这些信息。
翻译自: https://code.tutsplus.com/tutorials/google-fit-for-android-recording-api--cms-25855