2014-12-12 4 views
4

현재 Google Fit API로 작업 중이며 센서 API에 문제가 있습니다. 내 애플 리케이션의 운동에 대한 사용자의 현재 속도를 얻으려고하지만 설명서가 약간 혼란 스럽다. 이 코드에서Google Fit의 API를 사용하여 사용자의 현재 속도를 얻는 방법은 무엇인가요?

구글의 정보 페이지에서 예입니다

Fitness.SensorsApi.add(
      mClient, 
      new SensorRequest.Builder() 
        // Optional but recommended for custom data sets. 
        .setDataType(DataType.TYPE_SPEED)// Can't be omitted. 
        .setSamplingRate(1, TimeUnit.SECONDS).setAccuracyMode(SensorRequest.ACCURACY_MODE_HIGH) 
        .build(), mListener3) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        if (status.isSuccess()) { 
         Log.i(TAG, "Listener registered!"); 
        } else { 
         Log.i(TAG, "Listener not registered."); 
        } 
       } 
      }); 

// 내가 거리, 심장 박동처럼 다른 모든 데이터 유형 값을 얻고, 리스너

현재
mListener3 = new OnDataPointListener() { 
     @Override 
     public void onDataPoint(DataPoint dataPoint) { 


      final float speed = dataPoint.getValue(Field.FIELD_SPEED).asFloat(); 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        Log.i(TAG, "In Speed" + speed); 
        speedTxtView.setText("" + speed); 

       } 
      }); 


     } 

을 추가, 단계 수 및 현재 활동을 표시하지만 사용자의 현재 속도는 알 수 없습니다. 나는 올바르게하고 있습니까?

+0

속도 데이터 소스가 SensorsApi.findDataSources 방법에 의해 사용 가능한지 확인 했습니까? –

답변

3

Google 피트니스 Github 저장소에서 basichistorysessions sample을 사용해보세요.

샘플 코드 :

// Build a session read request 
     SessionReadRequest readRequest = new SessionReadRequest.Builder() 
       .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS) 
       .read(DataType.TYPE_SPEED) 
       .setSessionName(SAMPLE_SESSION_NAME) 
       .build(); 


// Invoke the Sessions API to fetch the session with the query and wait for the result 
        // of the read request. 
        SessionReadResult sessionReadResult = 
          Fitness.SessionsApi.readSession(mClient, readRequest) 
            .await(1, TimeUnit.MINUTES); 

        // Get a list of the sessions that match the criteria to check the result. 
        Log.i(TAG, "Session read was successful. Number of returned sessions is: " 
          + sessionReadResult.getSessions().size()); 
        for (Session session : sessionReadResult.getSessions()) { 
         // Process the session 
         dumpSession(session); 

         // Process the data sets for this session 
         List<DataSet> dataSets = sessionReadResult.getDataSet(session); 
         for (DataSet dataSet : dataSets) { 
          dumpDataSet(dataSet); 
         } 
        } 

당신은 자세한 내용은이 reading fitness data using sessions 섹션을 참조 할 수 있습니다.

0

속도를 얻으려면 dataSourceType을 파생해야합니다. 다음은 나를 위해 일한다

 Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() 
      .setDataTypes(DataType.TYPE_SPEED) 
      .setDataSourceTypes(DataSource.TYPE_DERIVED) 
      .build()) 
      .setResultCallback(new ResultCallback<DataSourcesResult>() { 
       @Override 
       public void onResult(DataSourcesResult dataSourcesResult) { 
        Log.i(TAG, "Result: " + dataSourcesResult.getStatus().toString()); 
        for (DataSource dataSource : dataSourcesResult.getDataSources()) { 
         Log.i(TAG, "Data source found: " + dataSource.toString()); 
        } 
       } 
      });