Android Google 拟合示例不起作用
Android Google Fit example is not working
我无法获取 Google 提供的 Google Fit 运行 的示例应用程序。
到目前为止我发现,在我选择 Account
.
后,我在 onActivityResult
中得到的 resultCode
是 0
我目前使用的示例应用程序是 BasicRecordingApi
,可以在 here 找到它。
但我也试过其他的。
我为应用程序创建了一个 API 密钥,并且我已经启用了 Google Fit API。
没有任何帮助。
有什么想法吗?
开始 Android
这解释了如何使用 Google Fit on Android 开始开发。 Google Fit 是 Google Play 服务的一部分。
第 1 步:获取 Google 播放服务
Google Fit 可在 Android 设备上使用 Google Play 服务 7.0 或更高版本。 运行ning Android 2.3 或更高版本且具有 Google Play 商店应用的设备会自动接收 Google Play 服务的更新。
要检查您的设备上安装了哪个版本的 Google Play 服务,请转至设置 > 应用 > Google Play 服务。
确保您的开发主机上有 Google Play 服务的最新客户端库:
1.Open Android SDK 管理器。
2.Under 附加功能,找到 Google 播放服务和 Google 存储库。
3.If 这些包的状态与已安装不同,select 它们都是,然后单击安装包。
第 2 步:获取 Google 帐户
要使用 Google Fit API,您需要一个 Google 帐户。
第 3 步:启用健身 API
在 google 控制台创建一个项目
1.Go 到 Google 开发者控制台。
2.Click 创建项目。
3.In 在“项目名称”字段中,为您的项目键入一个名称,然后单击“创建”。
激活健身API
1.Go 到 Google 开发者控制台。
2.In左侧边栏,点击APIs和Auth。
3.Find Fitness API 并将其状态设置为 ON。
创建新的客户端 ID
1.Go 到 Google 开发者控制台。
2.In 在左侧边栏中,单击凭据。
3.Click 创建一个新的客户端 ID。出现“创建客户端 ID”对话框。
4.Under 应用程序类型,select 已安装的应用程序。
5.Under 安装的应用程序类型,select Android。
6.In 程序包名称字段,输入您的 Android 应用程序的程序包名称。
7.In 签名证书指纹 (SHA1) 字段,输入证书的 SHA1 指纹。
8.Click 创建客户端 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 on Android 开始开发。 Google Fit 是 Google Play 服务的一部分。
第 1 步:获取 Google 播放服务
Google Fit 可在 Android 设备上使用 Google Play 服务 7.0 或更高版本。 运行ning Android 2.3 或更高版本且具有 Google Play 商店应用的设备会自动接收 Google Play 服务的更新。
要检查您的设备上安装了哪个版本的 Google Play 服务,请转至设置 > 应用 > Google Play 服务。
确保您的开发主机上有 Google Play 服务的最新客户端库:
打开 Android SDK 管理器。
在 Extras 下,找到 Google Play services 和 Google Repository。
如果这些包的状态不同于已安装,select 它们,然后单击安装包。
第 2 步:获取 Google 帐户
要使用 Google Fit API,您需要一个 Google 帐户。如果您已经有一个帐户,那么一切就绪。您可能还需要一个单独的 Google 帐户用于测试目的。
第 3 步:启用健身 API
要与 Google Fit 进行身份验证和通信,您必须在 Google 开发人员控制台中创建一个项目,激活 Fitness API,创建一个 OAuth 2.0 客户端 ID,然后注册public 来自您应用的已签名 APK 的证书。
创建项目
注意:对应用程序的 Android 和 REST 版本使用相同的项目。
转到 Google 开发人员控制台。
单击创建项目。
在“项目名称”字段中,为您的项目键入一个名称,然后单击“创建”。
激活健身API
转到 Google 开发人员控制台。
在左侧边栏中,单击 APIs 和 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”对话框。
在“应用程序类型”下,select 已安装的应用程序。
在已安装的应用程序类型下,select 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.Define activity 中的变量可帮助您跟踪连接状态:
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.Determine是否在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.Create Google 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.Manage activity 中客户端的连接生命周期:
@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);
}
我无法获取 Google 提供的 Google Fit 运行 的示例应用程序。
到目前为止我发现,在我选择 Account
.
onActivityResult
中得到的 resultCode
是 0
我目前使用的示例应用程序是 BasicRecordingApi
,可以在 here 找到它。
但我也试过其他的。
我为应用程序创建了一个 API 密钥,并且我已经启用了 Google Fit API。
没有任何帮助。
有什么想法吗?
开始 Android
这解释了如何使用 Google Fit on Android 开始开发。 Google Fit 是 Google Play 服务的一部分。
第 1 步:获取 Google 播放服务
Google Fit 可在 Android 设备上使用 Google Play 服务 7.0 或更高版本。 运行ning Android 2.3 或更高版本且具有 Google Play 商店应用的设备会自动接收 Google Play 服务的更新。
要检查您的设备上安装了哪个版本的 Google Play 服务,请转至设置 > 应用 > Google Play 服务。
确保您的开发主机上有 Google Play 服务的最新客户端库:
1.Open Android SDK 管理器。 2.Under 附加功能,找到 Google 播放服务和 Google 存储库。 3.If 这些包的状态与已安装不同,select 它们都是,然后单击安装包。
第 2 步:获取 Google 帐户 要使用 Google Fit API,您需要一个 Google 帐户。
第 3 步:启用健身 API 在 google 控制台创建一个项目
1.Go 到 Google 开发者控制台。 2.Click 创建项目。 3.In 在“项目名称”字段中,为您的项目键入一个名称,然后单击“创建”。
激活健身API 1.Go 到 Google 开发者控制台。 2.In左侧边栏,点击APIs和Auth。 3.Find Fitness API 并将其状态设置为 ON。
创建新的客户端 ID
1.Go 到 Google 开发者控制台。 2.In 在左侧边栏中,单击凭据。 3.Click 创建一个新的客户端 ID。出现“创建客户端 ID”对话框。 4.Under 应用程序类型,select 已安装的应用程序。 5.Under 安装的应用程序类型,select Android。 6.In 程序包名称字段,输入您的 Android 应用程序的程序包名称。 7.In 签名证书指纹 (SHA1) 字段,输入证书的 SHA1 指纹。 8.Click 创建客户端 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 on Android 开始开发。 Google Fit 是 Google Play 服务的一部分。
第 1 步:获取 Google 播放服务
Google Fit 可在 Android 设备上使用 Google Play 服务 7.0 或更高版本。 运行ning Android 2.3 或更高版本且具有 Google Play 商店应用的设备会自动接收 Google Play 服务的更新。
要检查您的设备上安装了哪个版本的 Google Play 服务,请转至设置 > 应用 > Google Play 服务。
确保您的开发主机上有 Google Play 服务的最新客户端库:
打开 Android SDK 管理器。 在 Extras 下,找到 Google Play services 和 Google Repository。 如果这些包的状态不同于已安装,select 它们,然后单击安装包。 第 2 步:获取 Google 帐户
要使用 Google Fit API,您需要一个 Google 帐户。如果您已经有一个帐户,那么一切就绪。您可能还需要一个单独的 Google 帐户用于测试目的。
第 3 步:启用健身 API
要与 Google Fit 进行身份验证和通信,您必须在 Google 开发人员控制台中创建一个项目,激活 Fitness API,创建一个 OAuth 2.0 客户端 ID,然后注册public 来自您应用的已签名 APK 的证书。
创建项目
注意:对应用程序的 Android 和 REST 版本使用相同的项目。 转到 Google 开发人员控制台。 单击创建项目。 在“项目名称”字段中,为您的项目键入一个名称,然后单击“创建”。 激活健身API
转到 Google 开发人员控制台。 在左侧边栏中,单击 APIs 和 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”对话框。 在“应用程序类型”下,select 已安装的应用程序。 在已安装的应用程序类型下,select 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.Define activity 中的变量可帮助您跟踪连接状态:
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.Determine是否在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.Create Google 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.Manage activity 中客户端的连接生命周期:
@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);
}