2016-03-31 21 views
0

Google Fit Sensor Api'yi kullanarak kalori ve mesafe alabilir miyim? Her saniye güncellenmesi gereken güncel verileri göstermesi gereken gerçek zamanlı bir spor uygulaması yazarım.Google Fit Sensor Api'yi kullanarak kalori ve mesafe alabilir miyim?

Api veya History Api oturumunun yolumu kullanmanın iyi bir fikir olmadığını düşünüyorum. Eğer yanılıyorsam, lütfen beni düzeltin. Ben

Eklendi gerçek zamanlı olarak sadece manuel alma adımları bulabiliriz: işin sadece TYPE_STEP_COUNT_CUMULATIVE aşağıdaki kodu, örneğin TYPE_DISTANCE_CUMULATIVE

İşte
private void buildFitnessClient() { 
    if (mClient == null) { 
     mClient = new GoogleApiClient.Builder(getActivity()) 
       .addApi(Fitness.SENSORS_API) 
       .addScope(new Scope(Scopes.FITNESS_LOCATION_READ)) 
       .addConnectionCallbacks(
         new GoogleApiClient.ConnectionCallbacks() { 
          @Override 
          public void onConnected(Bundle bundle) { 
           Log.i(TAG, "Connected!!!"); 
           findFitnessDataSources(); 
          } 

          @Override 
          public void onConnectionSuspended(int i) { 

           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"); 
           } 
          } 
         } 
       ) 
       .enableAutoManage((MainActivity)getActivity(), 0, new GoogleApiClient.OnConnectionFailedListener() { 
        @Override 
        public void onConnectionFailed(ConnectionResult result) { 
         Log.i(TAG, "Google Play services connection failed. Cause: " + 
           result.toString()); 
        } 
       }) 
       .build(); 
    } 
} 

private void findFitnessDataSources() { 

    Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() 
      .setDataTypes(DataType.TYPE_DISTANCE_CUMULATIVE) 
      .setDataSourceTypes(DataSource.TYPE_RAW) 
      .build()) 
      .setResultCallback(new ResultCallback<DataSourcesResult>() { 
       @Override 
       public void onResult(DataSourcesResult dataSourcesResult) { 
        for (DataSource dataSource : dataSourcesResult.getDataSources()) { 
         if (DataType.TYPE_DISTANCE_CUMULATIVE.equals(dataSource.getDataType())) { 
          registerFitnessDataListener(dataSource, DataType.TYPE_DISTANCE_CUMULATIVE); 
         } 
        } 
       } 
      }); 
} 

private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { 
    mListener = new OnDataPointListener() { 
     @Override 
     public void onDataPoint(DataPoint dataPoint) { 
      for (final Field field : dataPoint.getDataType().getFields()) { 
       final Value val = dataPoint.getValue(field); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getActivity(), "Field: " + field.getName() + " Value: " + val, Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } 
    }; 

    Fitness.SensorsApi.add(
      mClient, 
      new SensorRequest.Builder() 
        .setDataSource(dataSource) 
        .setDataType(dataType) 
        .setSamplingRate(3, TimeUnit.SECONDS) 
        .build(), 
      mListener) 
      .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."); 
        } 
       } 
      }); 
} 

cevap

1

YES! You can

belgelerdir çalışmıyor ne yapabilir ve yapamaz. Ayrıca özel veri değerleri de yapabilirsiniz.

+0

Sensör Api'yi (History Api veya Session Api değil) kullanarak TYPE_DISTANCE_CUMULATIV gibi türlerle çalışabileceğinden emin misiniz? – Devnock

+0

Neden görmüyorum? Dene. Öyle inanıyorum. – Auriga

İlgili konular