1

我无法让 Google 提供的运行 Google Fit 的示例应用程序。

到目前为止,我发现,resultCode我进入onActivityResult0在我选择了一个Account.

我现在使用的示例应用程序是BasicRecordingApi,可以在这里找到。但我也试过其他的。

我为该应用创建了一个 API 密钥,并且已经启用了 Google Fit API。

没有什么帮助。

有任何想法吗?

4

1 回答 1

12

安卓入门

这解释了如何开始在 Android 上使用 Google Fit 进行开发。Google Fit 是 Google Play 服务的一部分。

第 1 步:获取 Google Play 服务

Google Fit 可在装有 Google Play 服务 7.0 或更高版本的 Android 设备上使用。运行 Android 2.3 或更高版本且具有 Google Play 商店应用程序的设备会自动接收对 Google Play 服务的更新。

要检查您的设备上安装了哪个版本的 Google Play 服务,请转到设置 > 应用程序 > Google Play 服务。

确保您的开发主机上有用于 Google Play 服务的最新客户端库:

1.打开安卓SDK管理器。2.在 Extras 下,找到 Google Play services 和 Google Repository。3.如果这些包的状态与已安装不同,请同时选择它们并单击安装包。

第 2 步:获取 Google 帐户 要使用 Google Fit API,您需要一个 Google 帐户。

第 3 步:启用 Fitness API 在 google 控制台创建项目

1.转到谷歌开发者控制台。2.单击创建项目。3.在项目名称字段中,输入项目名称,然后单击创建。

激活 Fitness API 1.转到 Google Developers Console。2.在左侧边栏中,单击APIs and Auth。3.找到 Fitness API 并将其状态设置为 ON。

创建新的客户 ID

1.转到谷歌开发者控制台。2.在左侧边栏中,单击凭据。3.单击创建新的客户端 ID。将出现创建客户端 ID 对话框。4.在应用程序类型下,选择已安装的应用程序。5.在已安装的应用程序类型下,选择 Android。6.在包名称字段中,输入您的 Android 应用程序的包名称。7.在签名证书指纹 (SHA1) 字段中,输入证书的 SHA1 指纹。8.单击创建客户端 ID。

第 4 步:配置您的项目

在 IDE 中,打开模块的 build.gradle 文件并将 Google Play 服务客户端库添加为依赖项:

 apply plugin: 'com.android.application'
    ...

    dependencies {
        compile 'com.google.android.gms:play-services-fitness:8.3.0'
    }

第 5 步:连接到健身服务

安卓入门

本文档介绍了如何开始在 Android 上使用 Google Fit 进行开发。Google Fit 是 Google Play 服务的一部分。

第 1 步:获取 Google Play 服务

Google Fit 可在装有 Google Play 服务 7.0 或更高版本的 Android 设备上使用。运行 Android 2.3 或更高版本且具有 Google Play 商店应用程序的设备会自动接收对 Google Play 服务的更新。

要检查您的设备上安装了哪个版本的 Google Play 服务,请转到设置 > 应用程序 > Google Play 服务。

确保您的开发主机上有用于 Google Play 服务的最新客户端库:

打开 Android SDK 管理器。在 Extras 下,找到 Google Play services 和 Google Repository。如果这些包的状态与已安装不同,请同时选择它们并单击安装包。第 2 步:获取 Google 帐户

要使用 Google Fit API,您需要一个 Google 帐户。如果您已经有一个帐户,那么您就一切就绪。您可能还需要一个单独的 Google 帐户来进行测试。

第 3 步:启用 Fitness API

要进行身份验证并与 Google Fit 进行通信,您必须在 Google Developers Console 中创建一个项目,激活 Fitness API,创建 OAuth 2.0 客户端 ID,并从您应用的签名 APK 注册公共证书。

创建项目

注意:为您的应用程序的 Android 和 REST 版本使用相同的项目。转到 Google 开发者控制台。单击创建项目。在项目名称字段中,输入项目名称并单击创建。激活健身 API

转到 Google 开发者控制台。在左侧边栏中,单击 API 和 Auth。找到 Fitness API 并将其状态设置为 ON。Fitness API 现在出现在 API 列表的顶部。

获取证书的 SHA1 指纹

要为您的 Android 应用创建新的客户端 ID,您需要用于签署 APK 的证书的 SHA1 指纹。要获取此指纹:

找到您的密钥库的位置。在终端中,从 JDK 运行 keytool 实用程序。例如,如果您使用debug密钥库: $ keytool -exportcert -alias \ androiddebugkey -keystore \ ~/.android/debug.keystore -list -v 注意:在 Mac OS 和 Linux 上,调试密钥库通常位于 ~/ .android/debug.keystore。在 Windows 上,它通常位于 %USERPROFILE%.android\debug.keystore。

keytool 命令的输出包含证书的 SHA1 指纹。

图 1:创建客户端 ID 对话框。创建新的客户 ID

转到 Google 开发者控制台。在左侧边栏中,单击凭据。单击创建新的客户 ID。将出现创建客户端 ID 对话框。在应用程序类型下,选择已安装的应用程序。在已安装的应用程序类型下,选择 Android。在包名称字段中,输入您的 Android 应用程序的包名称。在签名证书指纹 (SHA1) 字段中,输入证书的 SHA1 指纹。单击创建客户端 ID。第 4 步:配置您的项目

Android Studio 可让您轻松为 Google Fit 创建项目。按照创建项目中描述的步骤进行操作。

在 IDE 中,打开模块的 build.gradle 文件并将 Google Play 服务客户端库添加为依赖项:

apply plugin: 'com.android.application'
...

dependencies {
    compile 'com.google.android.gms:play-services-fitness:8.3.0'
}

第 5 步:连接到健身服务

在您可以从 Google Fit API 调用方法之前,您必须连接到适当的健身服务或服务,这些服务是 Google Play 服务的一部分。您可以使用以下 API:

1.Fitness.SENSORS_API
2.Fitness.RECORDING_API
3.Fitness.HISTORY_API
4.Fitness.SESSIONS_API
5.Fitness.BLE_API
6.Fitness.CONFIG_API

创建 API 客户端,如下所示:

1.在您的活动中定义变量以帮助您跟踪连接状态:

private static final int REQUEST_OAUTH = 1;

/**
 *  Track whether an authorization activity is stacking over the current activity, i.e. when
 *  a known auth error is being resolved, such as showing the account chooser or presenting a
 *  consent dialog. This avoids common duplications as might happen on screen rotations, etc.
 */
private static final String AUTH_PENDING = "auth_state_pending";
private boolean authInProgress = false;

private GoogleApiClient mClient = null;

2.在onCreate方法中判断是否正在进行认证:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Put application specific code here.

    if (savedInstanceState != null) {
        authInProgress = savedInstanceState.getBoolean(AUTH_PENDING);
    }

    buildFitnessClient();
}

**3.创建谷歌API客户端并提供所需的回调方法:*

/**
 *  Build a {@link GoogleApiClient} that will authenticate the user and allow the application
 *  to connect to Fitness APIs. The scopes included should match the scopes your app needs
 *  (see documentation for details). Authentication will occasionally fail intentionally,
 *  and in those cases, there will be a known resolution, which the OnConnectionFailedListener()
 *  can address. Examples of this include the user never having signed in before, or having
 *  multiple accounts on the device and needing to specify which account to use, etc.
 */
private void buildFitnessClient() {
    // Create the Google API Client
    mClient = new GoogleApiClient.Builder(this)
            .addApi(Fitness.SENSORS_API)
            .addScope(new Scope(Scopes.FITNESS_LOCATION_READ))
            .addConnectionCallbacks(
                    new GoogleApiClient.ConnectionCallbacks() {

                        @Override
                        public void onConnected(Bundle bundle) {
                            Log.i(TAG, "Connected!!!");
                            // Now you can make calls to the Fitness APIs.
                            // Put application specific code here.
                        }

                        @Override
                        public void onConnectionSuspended(int i) {
                            // If your connection to the sensor gets lost at some point,
                            // you'll be able to determine the reason and react to it here.
                            if (i == ConnectionCallbacks.CAUSE_NETWORK_LOST) {
                                Log.i(TAG, "Connection lost.  Cause: Network Lost.");
                            } else if (i == ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
                                Log.i(TAG, "Connection lost.  Reason: Service Disconnected");
                            }
                        }
                    }
            )
            .addOnConnectionFailedListener(
                    new GoogleApiClient.OnConnectionFailedListener() {
                        // Called whenever the API client fails to connect.
                        @Override
                        public void onConnectionFailed(ConnectionResult result) {
                            Log.i(TAG, "Connection failed. Cause: " + result.toString());
                            if (!result.hasResolution()) {
                                // Show the localized error dialog
                                GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),
                                        MainActivity.this, 0).show();
                                return;
                            }
                            // The failure has a resolution. Resolve it.
                            // Called typically when the app is not yet authorized, and an
                            // authorization dialog is displayed to the user.
                            if (!authInProgress) {
                                try {
                                    Log.i(TAG, "Attempting to resolve failed connection");
                                    authInProgress = true;
                                    result.startResolutionForResult(MainActivity.this,
                                            REQUEST_OAUTH);
                                } catch (IntentSender.SendIntentException e) {
                                    Log.e(TAG,
                                            "Exception while starting resolution activity", e);
                                }
                            }
                        }
                    }
            )
            .build();
}

4.在活动中管理客户端的连接生命周期:

@Override
protected void onStart() {
    super.onStart();
    // Connect to the Fitness API
    Log.i(TAG, "Connecting...");
    mClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    if (mClient.isConnected()) {
        mClient.disconnect();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_OAUTH) {
        authInProgress = false;
        if (resultCode == RESULT_OK) {
            // Make sure the app is not already connected or attempting to connect
            if (!mClient.isConnecting() && !mClient.isConnected()) {
                mClient.connect();
            }
        }
    }
}

@Override
   protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
  }
于 2015-12-01T10:46:38.587 回答