Recording APIを使って購読に関する操作を行う

ツイート このエントリーをはてなブックマークに追加
1つ上へ / ブログトップへ

Recordging APIを使うと、歩数のデータなどをバックグラウンドで自動で計測してくれたりします。計測したデータはHistory APIで確認します。

まずは、計測してほしいデータを購読します。次は歩数の積算値を購読する例です。

private void subscribe() {
  new AsyncTask<Void, Void, Status>() {
    @Override
    protected com.google.android.gms.common.api.Status doInBackground(Void... voids) {
      PendingResult<com.google.android.gms.common.api.Status> pendingResult =
        Fitness.RecordingApi.subscribe(mApiClient, DataTypes.STEP_COUNT_CUMULATIVE);
      // 2. Retrieve the result synchronously
      // (For the subscribe method, this call returns immediately)
      return pendingResult.await();
    }
    @Override
    protected void onPostExecute(com.google.android.gms.common.api.Status status) {
      super.onPostExecute(status);
      if (status.isSuccess()) {
        addMessage("Successfully subscribed!");
      } else {
        addMessage("There was a problem subscribing.");
      }
    }
  }.execute();
}

await()をUIスレッドで呼ぶと落ちてしまうので、AsyncTaskのdoInBackground()内で呼ぶようにします。

購読中のデータ一覧を取得するには、Fitness.RecordingApi.listSubscriptions()を呼びます。

private void listSubscription() {
  new AsyncTask<Void, Void, ListSubscriptionsResult>() {
    @Override
    protected ListSubscriptionsResult doInBackground(Void... voids) {
      PendingResult<ListSubscriptionsResult> pendingResult =
        Fitness.RecordingApi.listSubscriptions(mApiClient, DataTypes.STEP_COUNT_CUMULATIVE);

      // 2. Retrieve the list of subscriptions synchronously
      // (For the listSubscriptions method, this call returns immediately)
      return pendingResult.await();
    }

    @Override
    protected void onPostExecute(ListSubscriptionsResult listResult) {
      super.onPostExecute(listResult);
      List<Subscription> subscriptions = listResult.getSubscriptions();
      addMessage("count of subscriptions : " + subscriptions.size());

      for (Subscription sc : subscriptions) {
        // Get information about each subscription
        DataType dt = sc.getDataType();
        addMessage("dataType : " + dt.getName());
      }
    }
  }.execute();
}

購読の解除はFitness.RecordingApi.unsubscribe()を呼びます。

private void unsubscribe() {
  new AsyncTask<Void, Void, Status>() {
    @Override
    protected com.google.android.gms.common.api.Status doInBackground(Void... voids) {
      PendingResult<com.google.android.gms.common.api.Status> pendingResult =
        Fitness.RecordingApi.unsubscribe(mApiClient, DataTypes.STEP_COUNT_CUMULATIVE);
      // 2. Retrieve the result of the request synchronously
      // (For the unsubscribe method, this call returns immediately)
      return pendingResult.await();
    }

    @Override
    protected void onPostExecute(com.google.android.gms.common.api.Status status) {
      super.onPostExecute(status);
      if (status.isSuccess()) {
        addMessage("Subscription removed successfully.");
      } else {
        addMessage("Subscription not removed.");
      }
    }
  }.execute();
}
1つ上へ / ブログトップへ