1

センサーを使用して歩数を検出しており、ソースを履歴に変更したいと考えています (今日の合計歩数を取得したい)。複数のスタック オーバーフローとチュートリアル (ほとんどは Google 独自のもの) に従いました。これは私のコードです。スティッキー サービスで作成されたクラスにあります。

private void buildFitnessClient() {
    mClient = new GoogleApiClient.Builder(context)
            .addApi(Fitness.HISTORY_API)
            .build();
    mClient.connect();

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByTime(1, TimeUnit.DAYS)
            .setTimeRange(
                    DateTime.now().minusDays(5).getMillis(),
                    DateTime.now().getMillis(),
                    TimeUnit.MILLISECONDS)
            .build();

    Fitness.HistoryApi.readData(mClient, readRequest).setResultCallback(new ResultCallback<DataReadResult>() {
        @Override
        public void onResult(DataReadResult dataReadResult) {
            Log.d(TAG, "onResult");
            Log.d(TAG, "" + dataReadResult.getBuckets().size());
            for (Bucket bucket : dataReadResult.getBuckets()) {
                List<DataSet> dataSets = bucket.getDataSets();
                for (DataSet dataSet : dataSets) {
                    Log.d(TAG, "dataSet.dataType: " + dataSet.getDataType().getName());

                    for (DataPoint dp : dataSet.getDataPoints()) {
                        Log.d(TAG, "dp:" + dp.toString());
                    }
                }
            }
        }
    });
    Log.d(TAG, "Dataset in History end ");
}

本質的に、何も起こりません。ログ「onResult」が表示されません。どうしたの?それはクライアントのビルドですか?文脈?パラメータ?

ありがとうございました!

4

1 に答える 1

0

答えは、適切な許可がありませんでした。いくつかのクラスを変更し、アプリのデータを消去したため、権限が失われ、それらを復元する手段がありませんでした。

だから、何が必要です:

api-client が ( を使用してaddOnConnectionFailedListener) 接続されているかどうかを確認し、接続が失敗した場合は、次のようなコードを実行します。

    //ConnectionResult result = intent.getExtras().getParcelable(OrderKeys.FITNESS_CONNECTION_FAILED_RESULT);
// This is my solution for service-activty communication, this is run in activty

            Log.i(TAG, "Connection failed. Cause: " + result.toString());
            if (!result.hasResolution()) {
                // Show the localized error dialog
                GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),
                        LifeAidActivity.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(LifeAidActivity.this,
                            REQUEST_OAUTH);
                } catch (IntentSender.SendIntentException e) {
                    Log.e(TAG,
                            "Exception while starting resolution activity", e);
                }
            }
于 2015-07-01T04:53:42.237 に答える