2016-07-05 13 views
3

Ich versuche, einen Google Fit Listener zu implementieren, wenn Daten in Google Fit-Dienste aktualisiert werden.Google Fit Listen für Datenaktualisierungen funktionieren nicht

In diesem link of Google Fit documentation gibt es ein einfaches Beispiel, aber es ist nicht 100% klar. Aus diesem Grunde habe ich zwei Probleme:

  1. Ich weiß nicht, wie mResultCallback Variable zu implementieren (es gibt keine Beispiele in dieser Dokumentation).
  2. Wenn ich eine einfache ResultCallback definieren (es scheint zu funktionieren, aber ich bin mir nicht sicher) und ich starten Sie die Anwendung, es gibt mir ein Ergebnis Fehlercode: java.lang.SecurityException: Signaturprüfung
fehlgeschlagen

Antwort

2

Der Code innerhalb des HistortyApi listet eines von android.permission.ACCESS_FINE_LOCATION oder android.permission.BODY_SENSORS als erforderlich auf.

Das Hinzufügen dieser Berechtigungen zu meinem Code hat das Problem jedoch nicht gelöst.

Bestätigter Fehler in den Google Fit-Diensten. Siehe Diskussion in https://plus.google.com/110141422948118561903/posts/Lqri4LVR7cD

+0

Wie ist das immer noch gebrochen ... –

0

mResultCallback ist ein ResultCallback <Status>, also müssen Sie eine Klasse dieses Typs implementieren. Die Dokumentation ist here, aber es gibt nur eine Methode, die Sie implementieren müssen:

public abstract void onResult (Status result) 

Der üblicher Weg ist, dies zu tun, um eine anonyme Klasse entweder, wenn Sie erklären mResultCallback oder, wenn Sie es als Parameter verwenden. Im Folgenden finden Sie BasicRecordingAPI Beispiel ist ein Beispiel von Google:

Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_ACTIVITY_SAMPLE) 
    .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      if (status.isSuccess()) { 
       if (status.getStatusCode() 
         == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) { 
        Log.i(TAG, "Existing subscription for activity detected."); 
       } else { 
        Log.i(TAG, "Successfully subscribed!"); 
       } 
      } else { 
       Log.i(TAG, "There was a problem subscribing."); 
      } 
     } 
}); 

Wenn Sie eine Membervariable verwenden möchten Sie einfach einen Auftrag stattdessen machen können:

ResultCallback<Status> mResultCallback = new ResultCallback<Status>() { 
    @Override 
    public void onResult(Status status) { 
     ... 
    } 
}); 

Natürlich können Sie eine nicht-anonyme Klasse definieren können, Aber wenn du das für jeden Callback gemacht hättest, würdest du am Ende eine Menge Klassen erstellen.