私は自分のアプリにステップカウンターを追加したいと思います。 今私はGoogle fit
を使用してユーザーステップ数を測定しています。Google Fitアプリがユーザーによってインストールされ使用されているかどうかを検出できますか?
私が直面している問題は、すべてのデバイスにGoogle Fit
アプリがインストールされているわけではなく、すべてのユーザーが(クライアントとして)アプリサービスに登録するわけではありません。
だから、所望の流れは次のとおりです。Google fit
アプリがインストールされている場合
- を検出します。
- インストールされている場合は、ユーザーが
Google fit
アプリに登録されているかどうかを確認してください。 Google fit
アプリにインストールして登録している場合は、ユーザーアカウントタイプのサポートでフィットネスサービスを使用しているかどうかを確認してください。 (ステップなどのデータを記録する)- 上記の内容がすべて「OK」の場合は、「Google fit」のポップアップを確認してください。
基本的には、ユーザーがフィットアプリを使用しているかどうかをチェックしたい場合は(上のすべての条件を使用して)、失敗した場合はデバイスのステップカウントセンサーを使用しますこの目標を達成するために他のセンサーを使用してください。
private void buildFitnessClient() {
// Create the Google API Client
mClient = new GoogleApiClient.Builder(getContext())
.addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_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.
new getFitnessTask().execute();
}
@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 == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
Log.i(TAG, "Connection lost. Cause: Network Lost.");
} else if (i == GoogleApiClient.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
if (getActivity() != null) {
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),
getActivity(), 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; activity; "+ getActivity());
if (getActivity() != null) {
authInProgress = true;
result.startResolutionForResult(getActivity(),
REQUEST_OAUTH);
}
} catch (IntentSender.SendIntentException e) {
Log.e(TAG,
"Exception while starting resolution activity", e);
}
}
}
}
)
.build();
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
Log.e(TAG, "onActivityResult requestCode=" + requestCode + ", resultCode=" + resultCode);
if (requestCode == REQUEST_OAUTH) {
authInProgress = false;
if (resultCode == Activity.RESULT_OK) {
Log.e(TAG, "RESULT_OK");
// Make sure the app is not already connected or attempting to connect
if (!mClient.isConnecting() && !mClient.isConnected()) {
mClient.connect();
}
} else if (resultCode == Activity.RESULT_CANCELED) {
Log.e(TAG, "RESULT_CANCELED");
}
}
}
private class getFitnessTask extends AsyncTask<Void, Void, Integer> {
...
}
}
必要あなたの助けみんな、
ありがとう:ここ
は、私はGoogleのフィットのAPIと接続するために使用しているコードです。
私は同じ問題に直面していますか? – shekar
同じ質問に対する解決策も探しています。あなたがすでにそれを持っている場合、答えを投稿してください。 –