2016-04-11 5 views
0

Ich habe eine benutzerdefinierte DataSource für Schrittzähler implementiert, und wenn ich einen Listener registrieren möchte, schlägt es mit Listener nicht registriert und Statuscode = 13. Wenn ich die Funktion findDataSources() verwende, funktioniert es gut, aber ich wollte einen Listener auf meiner Datenquelle hinzufügen. Weißt du, was das Problem ist? Vielen Dank! Hier"Listener not registered" mit Statuscode 13 mit SensorsApi

ist der Code:

public GoogleApiClient buildFitnessClient() { 
    mFitnessClient = new GoogleApiClient.Builder(context) 
      .addApi(Fitness.SENSORS_API) 
      .addApi(Fitness.SESSIONS_API) 
      .addApi(Fitness.RECORDING_API) 
      .addApi(Fitness.HISTORY_API) 
      .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
      .useDefaultAccount() 
      .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { 
       @Override 
       public void onConnected(Bundle bundle) { 
        Log.d(TAG, "Connected to fitness API"); 
        registerFitnessDataListener(); 
       } 
       @Override 
       public void onConnectionSuspended(int i) { 

       } 
      }) 
      .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { 
       @Override 
       public void onConnectionFailed(ConnectionResult result) { 
        Log.d(TAG, "Fitness Connection failed"); 
        if (!result.hasResolution()) { 
         retryFitnessConnect(); 
        return; 
        } 
       } 
      }) 
      .build(); 
    mFitnessClient.connect(); 
    return mFitnessClient; 
} 

    private void registerFitnessDataListener() { 
    mListener = new OnDataPointListener() { 
     @Override 
     public void onDataPoint(DataPoint dataPoint) { 
      for (Field field : dataPoint.getDataType().getFields()) { 
       Value val = dataPoint.getValue(field); 
       Log.i(TAG, "Detected DataPoint field: " + field.getName()); 
       Log.i(TAG, "Detected DataPoint value: " + val); 
       Log.i(TAG, "Detected DataPoint startTime: " + dataPoint.getStartTime(TimeUnit.MILLISECONDS));     
      } 
     } 
    }; 

    DataSource dataSourceSteps=new DataSource.Builder() 
      .setAppPackageName("myPackageName") 
      .setDataType(DataType.TYPE_STEP_COUNT_DELTA) 
      .setName("steps") 
      .setType(DataSource.TYPE_RAW) 
      .build(); 

    Fitness.SensorsApi.add(
      mFitnessClient, 
      new SensorRequest.Builder() 
        .setDataSource(dataSourceSteps) 
        .setSamplingRate(5, 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 "+status.getStatusCode()); 
        } 
       } 
      }); 
} 

Antwort

0

Die 'Sensors API' ermöglicht den Zugriff auf rohe Sensordatenströme von Sensoren auf dem Android-Gerät. Verwenden Sie die Methode 'Sensorspi.add', um einen Listener zum Empfangen von Daten bestimmter Fitnessdaten oder von einer bestimmten Datenquelle hinzuzufügen.

Im Folgenden ein Beispielcode-Ausschnitt ist wie Zuhörer zu konstruieren:

mListener = new OnDataPointListener() { 
@Override 
public void onDataPoint(DataPoint dataPoint) { 
for (Field field : dataPoint.getDataType().getFields()) { 
Value val = dataPoint.getValue(field); 
Log.i(TAG, "Detected DataPoint field: " + field.getName()); 
Log.i(TAG, "Detected DataPoint value: " + val); 
} 
} 
}; 

Fitness.SensorsApi.add(
mClient, 
new SensorRequest.Builder() 
.setDataSource(dataSource) // Optional but recommended for custom data sets. 
.setDataType(dataType) // Can't be omitted. 
.setSamplingRate(10, 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."); 
} 
} 
}); 
+0

Dies ist das gleiche wie ich, ist der einzige Unterschied, dass ich eine Datenquelle und fügen sie in SensorRequest erstellen und dann bekomme ich diesen Fehler . –