Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从Google Fit API获取步骤?_Android_Api_Google Fit_Google Fit Sdk - Fatal编程技术网

Android 如何从Google Fit API获取步骤?

Android 如何从Google Fit API获取步骤?,android,api,google-fit,google-fit-sdk,Android,Api,Google Fit,Google Fit Sdk,恕我直言,我对安卓和谷歌API完全陌生。我有以下连接到GoogleFit的代码。我还有一个API密钥和Oauth 在哪里/如何使用API密钥和Oauth?很多关于如何获取它们的指南,但是没有关于在应用程序中放置它们/如何使用它们的信息 以及如何实际使用返回的步骤。我建立了一个全球: private int steps; 然后尝试通过以下方式进行设置: steps = (int)total; 但它什么也没做 下面是函数的其余部分。我如何从中计算出步数呢 private void access

恕我直言,我对安卓和谷歌API完全陌生。我有以下连接到GoogleFit的代码。我还有一个API密钥和Oauth

在哪里/如何使用API密钥和Oauth?很多关于如何获取它们的指南,但是没有关于在应用程序中放置它们/如何使用它们的信息

以及如何实际使用返回的步骤。我建立了一个全球:

private int steps;
然后尝试通过以下方式进行设置:

steps = (int)total;
但它什么也没做

下面是函数的其余部分。我如何从中计算出步数呢

 private void accessGoogleFit() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        long endtime = cal.getTimeInMillis();
        cal.add(Calendar.YEAR, -1);
        long starttime = cal.getTimeInMillis();

        DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                .bucketByTime(1, TimeUnit.DAYS)
                .setTimeRange(starttime, endtime, TimeUnit.MILLISECONDS)
                .build();

        Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .readDailyTotal(DataType.TYPE_STEP_COUNT_DELTA)
                .addOnSuccessListener(new OnSuccessListener<DataSet>() {
                    @Override
                    public void onSuccess(DataSet dataSet) {
                        Log.d("Status", "Success");
                        long total = dataSet.isEmpty()
                                ? 0
                                : dataSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
                        Log.d("Steps ", String.valueOf(total));
                        steps = (int)total; //Trying to get steps here
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d("Status", "Failure", e);
                    }
                })
                .addOnCompleteListener(new OnCompleteListener<DataSet>() {
                    @Override
                    public void onComplete(@NonNull Task<DataSet> task) {
                        Log.d("Status", "Complete");

                    }
                });

    }
private void accessGoogleFit(){
Calendar cal=Calendar.getInstance();
校准设置时间(新日期());
long-endtime=cal.getTimeInMillis();
cal.add(日历年,-1);
long starttime=cal.getTimeInMillis();
DataReadRequest=newDataReadRequest.Builder()
.aggregate(DataType.TYPE\u STEP\u COUNT\u DELTA,DataType.aggregate\u STEP\u COUNT\u DELTA)
.bucketByTime(1,时间单位:天)
.setTimeRange(开始时间、结束时间、时间单位.毫秒)
.build();
Fitness.getHistoryClient(这个,GoogleSignIn.GetLastSignedAccount(这个))
.readDailyTotal(数据类型.类型\步骤\计数\增量)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共void(数据集){
日志d(“状态”、“成功”);
long total=dataSet.isEmpty()
? 0
:dataSet.getDataPoints().get(0).getValue(Field.Field_步骤).asInt();
Log.d(“步骤”,String.valueOf(总计));
步骤=(int)总计;//尝试在此处获取步骤
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
日志d(“状态”、“故障”,e);
}
})
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
日志d(“状态”、“完成”);
}
});
}

我一直在查阅官方文件和文件。但谷歌似乎在去年对API做了重大修改,因此大部分内容都过时了,包括谷歌自己的教程(发布于2015年)。一些更新了文档的地方提供了代码片段,我不知道如何使用它们,也不知道将它们放在哪里。

我就是这样提出请求的 GoogleFitAPI:使用FitnessOptions请求,如

    FitnessOptions fitnessOptions = FitnessOptions.builder()
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .build();
您需要请求GoogleSignIn.requestPermissions

和我的请求函数

Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        long endTime = cal.getTimeInMillis();
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        long startTime = cal.getTimeInMillis();

        DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
//                .read(DataType.TYPE_STEP_COUNT_DELTA)
                .bucketByTime(8, TimeUnit.DAYS)
                .enableServerQueries()
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build();

        Fitness.getHistoryClient(
                this,
                GoogleSignIn.getLastSignedInAccount(this))
                .readData(readRequest)
                .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                    @Override
                    public void onSuccess(DataReadResponse dataReadResponse) {
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.toString());
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getStatus());
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getDataSet(DataType.TYPE_STEP_COUNT_DELTA));
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getBuckets().get(0));
                        Log.d("TAG_F", "onSuccess: 1 " + dataReadResponse.getBuckets().get(0).getDataSets().size());

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d("TAG_F", "onFailure: 1 " + e.getMessage());
                    }
                })
                .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                    @Override
                    public void onComplete(@NonNull Task<DataReadResponse> task) {
                        Log.d("TAG_F", "onComplete: 1 ");
                    }
                });
Calendar cal=Calendar.getInstance();
校准设置时间(新日期());
long-endTime=cal.getTimeInMillis();
cal.add(日历周,每年,-1);
long startTime=cal.getTimeInMillis();
DataReadRequest=newDataReadRequest.Builder()
.aggregate(DataType.TYPE\u STEP\u COUNT\u DELTA,DataType.aggregate\u STEP\u COUNT\u DELTA)
//.read(数据类型.TYPE\u步骤\u计数\u增量)
.bucketByTime(8,时间单位:天)
.enableServerQueries()
.setTimeRange(开始时间、结束时间、时间单位.毫秒)
.build();
Fitness.getHistoryClient(
这
GoogleSignIn.GetLastSignedAccount(此))
.readData(readRequest)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(DataReadResponse DataReadResponse){
Log.d(“TAG_F”,“onSuccess:1”+dataReadResponse.toString());
Log.d(“TAG_F”,“onSuccess:1”+dataReadResponse.getStatus());
Log.d(“TAG_F”,“onSuccess:1”+dataReadResponse.getDataSet(DataType.TYPE_STEP_COUNT_DELTA));
Log.d(“TAG_F”,“onSuccess:1”+dataReadResponse.getbucket().get(0));
Log.d(“TAG_F”,“onSuccess:1”+dataReadResponse.getbucket().get(0.getDataSets().size());
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(“TAG_F”,“onFailure:1”+e.getMessage());
}
})
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(“TAG_F”,“onComplete:1”);
}
});

您是否检查了fit api是否有一些数据?我不知道怎么做。如何检查?如果您在真实设备上尝试,请安装google fit应用程序并打开它。如果它显示一些数据,我现在可以在我的应用程序中检查您的请求,那么它可以在
dataReadResponse.getbucket().get(0))上工作并显示给我:我的日志
Bucket{startTime=1551260296979,endTime=1551865096979,activity=0,DataSet=[DataSet{d:step_count.delta:gms:aggregated[RawDataPoint{[21648]@[1551260985001540984,1551864350023920959](0,1)}],bucketType=time,serverHasMoreData=false}
我的回调-
addOnSuccessListener(新OnSuccessListener()
我认为这是可行的……但我仍然不确定如何设置int stepNumber……我能做一些类似stepNumber=dataReadResponse.getDataSet(DataType.TYPE\u STEP\u COUNT\u DELTA)的事情吗;或者我需要以某种方式从fitnessOptions中提取它吗?为了澄清,我实际上如何将该响应转换为一个简单的整数或Long,以便在我的应用程序中使用?简单)您将返回到
.readDailyTotal(DataType.TYPE\u STEP\C