Как получить данные о здоровье из службы Google Fit в android - PullRequest
1 голос
/ 27 января 2020

Я пишу Android программу для получения определенных c данных о состоянии здоровья. Я прочитал документацию Google для получения данных от пользователей, но не могу получить в конце. Может ли кто-нибудь помочь решить эту проблему самым простым способом java. Мой текущий код прикреплен здесь с помощью.

public class MainActivity extends AppCompatActivity {

int GOOGLE_FIT_PERMISSIONS_REQUEST_CODE = 156;
GoogleSignInAccount googleSignInAccount=null;

//Request Data for STEP_COUNT_DELTA with READ permissions
//FitnessOptions - API
FitnessOptions fitnessOptions = FitnessOptions.builder()
        .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
        .build();

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);




    //Get instance of Google Account
     googleSignInAccount = googleSignInAccount(fitnessOptions);


    if (!GoogleSignIn.hasPermissions(googleSignInAccount, fitnessOptions)) {
        GoogleSignIn.requestPermissions(
                this, // your activity
                GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, // e.g. 1
                googleSignInAccount,
                fitnessOptions);
    } else {

            accessGoogleFit();

    }

}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == GOOGLE_FIT_PERMISSIONS_REQUEST_CODE) {

            accessGoogleFit();
        }
    }
}

private void accessGoogleFit() {

    Calendar cal = Calendar.getInstance();
    Date date = new Date();
    cal.setTime(date);

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

    //SessionReadRequest sessionReadRequest = new SessionReadRequest.Builder().read(DataType.AGGREGATE_ACTIVITY_SUMMARY).setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS).build();

    DataReadRequest dataReadRequest = new DataReadRequest.Builder().read(DataType.AGGREGATE_ACTIVITY_SUMMARY).setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS).build();

    Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this)).readData(dataReadRequest)
            .addOnSuccessListener(new OnSuccessListener<DataReadResponse>() {
                @Override
                public void onSuccess(DataReadResponse dataReadResponse) {

                    List<DataSet> dataSets = dataReadResponse.getDataSets();
                    for(DataSet dataSet: dataSets){
                        for(Field field: dataSet.getDataType().getFields()){
                            if(field.getName().equalsIgnoreCase(FitnessActivities.SLEEP)){
                                Toast.makeText(MainActivity.this, "ENCONTRADO", Toast.LENGTH_LONG).show();
                            }
                        }
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });

}





public GoogleSignInAccount googleSignInAccount(FitnessOptions fitnessOptions) {
    GoogleSignInAccount account = GoogleSignIn.getAccountForExtension(this, fitnessOptions);
    return account;
}
}

К этому коду архивируется аутентификация Google с пользователем перед доступом google fit -api , весь доступ api реализован на accessGooogleFit () функция

1 Ответ

1 голос
/ 27 января 2020

Этот фрагмент кода получен из документации API Google

SessionReadRequest request = new SessionReadRequest.Builder()
        .readSessionsFromAllApps()
        // Activity segment data is required for details of the fine-
        // granularity sleep, if it is present.
        .read(DataType.TYPE_ACTIVITY_SEGMENT)
        .setTimeInterval(1576690819, 1576750401, TimeUnit.SECONDS)
        .build();

Task<SessionReadResponse> task = sessionClient.readSession(request);

task.addOnSuccessListener(response -> {
    // Filter the resulting list of sessions to just those that are sleep.
    List<Session> sleepSessions = response.getSessions().stream()
            .filter(s -> s.getActivity().equals(FitnessActivities.SLEEP))
            .collect(Collectors.toList());

    for (Session session : sleepSessions) {
        Log.d("AppName", String.format("Sleep between %d and %d",
                session.getStartTime(TimeUnit.SECONDS),
                session.getEndTime(TimeUnit.SECONDS)));

        // If the sleep session has finer granularity sub-components, extract them:
        List<DataSet> dataSets = response.getDataSet(session);
        for (DataSet dataSet : dataSets) {
            for (DataPoint point : dataSet.getDataPoints()) {
                // The Activity defines whether this segment is light, deep, REM or awake.
                String sleepStage = point.getValue(Field.FIELD_ACTIVITY).asActivity();
                long start = point.getStartTime(TimeUnit.SECONDS);
                long end = point.getEndTime(TimeUnit.SECONDS);
                Log.d("AppName",
                        String.format("\t* %s between %d and %d", sleepStage, start, end));
            }
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...