Google Awareness API 예제

|

Google Awareness API 사용 예제입니다. 일단 앞서 포스팅한 Google API Key 등록을 먼저 해야 합니다. Google API Key를 획득했다면 다음과 같이 AndroidManifest.xml 에 해당 키 정보를 기입해줍니다.


AndroidManifest.xml

<application
  android:allowBackup="true"
  android:icon="@mipmap/ic_launcher"
  android:label="@string/app_name"
  android:supportsRtl="true"
  android:theme="@style/AppTheme">

  <meta-data
    android:name="com.google.android.awareness.API_KEY"
    android:value="API_KEY" />

  <activity android:name=".MainActivity">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />

      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
</application>


Activity_main.xml

그리고 간단한 버튼 4개를 배치해서 테스트를 하기 위한 activity_main.xml 코드는 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:orientation="vertical">

  <Button
    android:id="@+id/btn_get_location"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Get Location" />

  <Button
    android:id="@+id/btn_get_activity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Get Activity" />

  <Button
    android:id="@+id/btn_get_place"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Get Place" />

  <Button
    android:id="@+id/btn_get_weather"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Get Weather" />

  <ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
      android:id="@+id/textview"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

  </ScrollView>
</LinearLayout>


MainActivity.java

마지막으로, MainActivity.java 코드입니다.

package com.datacafe.googleawarenessapi;

import android.content.pm.PackageManager;
import android.location.Location;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.google.android.gms.awareness.Awareness;
import com.google.android.gms.awareness.snapshot.DetectedActivityResult;
import com.google.android.gms.awareness.snapshot.LocationResult;
import com.google.android.gms.awareness.snapshot.PlacesResult;
import com.google.android.gms.awareness.snapshot.WeatherResult;
import com.google.android.gms.awareness.state.Weather;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.location.ActivityRecognitionResult;
import com.google.android.gms.location.DetectedActivity;
import com.google.android.gms.location.places.PlaceLikelihood;

import java.util.List;

public class MainActivity extends AppCompatActivity {

  //Activities
  //public static final int IN_VEHICLE = 0;
  //public static final int ON_BICYCLE = 1;
  //public static final int ON_FOOT = 2;
  //public static final int STILL = 3;
  //public static final int UNKNOWN = 4;
  //public static final int TILTING = 5;
  //public static final int WALKING = 7;
  //public static final int RUNNING = 8;

  private GoogleApiClient mGoogleApiClient;
  private TextView mDebugLogView;

  private StringBuilder mLogBuilder = new StringBuilder();

  private void log(String message) {
    mLogBuilder.append(message);
    mLogBuilder.append("\n");

    if(mDebugLogView != null) {
      mDebugLogView.setText(mLogBuilder.toString());
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDebugLogView = (TextView) findViewById(R.id.textview);

    findViewById(R.id.btn_get_location).setOnClickListener(mOnClickListener);
    findViewById(R.id.btn_get_activity).setOnClickListener(mOnClickListener);
    findViewById(R.id.btn_get_place).setOnClickListener(mOnClickListener);
    findViewById(R.id.btn_get_weather).setOnClickListener(mOnClickListener);

    Log.i("snowdeer", "[snowdeer] start...");

    mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addApi(Awareness.API)
        .build();
    mGoogleApiClient.connect();

    Log.i("snowdeer", "[snowdeer] GoogleApi connect..");


  }

  private View.OnClickListener mOnClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View view) {
      switch(view.getId()) {
        case R.id.btn_get_location: {
          if(ContextCompat.checkSelfPermission(
              MainActivity.this,
              android.Manifest.permission.ACCESS_FINE_LOCATION) !=
              PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                MainActivity.this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                100
            );
            return;
          }

          Awareness.SnapshotApi.getLocation(mGoogleApiClient)
              .setResultCallback(new ResultCallback<LocationResult>() {
                @Override
                public void onResult(@NonNull LocationResult locationResult) {
                  if(!locationResult.getStatus().isSuccess()) {
                    log("Could not get location.");
                    return;
                  }
                  Location location = locationResult.getLocation();
                  log("Lat: " + location.getLatitude()
                      + ", Lon: " + location.getLongitude());
                }
              });
          break;
        }
        case R.id.btn_get_activity:
          Awareness.SnapshotApi.getDetectedActivity(mGoogleApiClient)
              .setResultCallback(new ResultCallback<DetectedActivityResult>() {
                @Override
                public void onResult(@NonNull DetectedActivityResult detectedActivityResult) {
                  if(!detectedActivityResult.getStatus().isSuccess()) {
                    log("Could not get the current activity.");
                    return;
                  }
                  ActivityRecognitionResult ar = detectedActivityResult
                      .getActivityRecognitionResult();
                  DetectedActivity probableActivity = ar.getMostProbableActivity();
                  log(probableActivity.toString());
                }
              });
          break;

        case R.id.btn_get_place: {
          if(ContextCompat.checkSelfPermission(
              MainActivity.this,
              android.Manifest.permission.ACCESS_FINE_LOCATION) !=
              PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                MainActivity.this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                100
            );
            return;
          }

          Awareness.SnapshotApi.getPlaces(mGoogleApiClient)
              .setResultCallback(new ResultCallback<PlacesResult>() {
                @Override
                public void onResult(@NonNull PlacesResult placesResult) {
                  if(!placesResult.getStatus().isSuccess()) {
                    log("Could not get places.");
                    return;
                  }
                  List<PlaceLikelihood> placeLikelihoodList = placesResult.getPlaceLikelihoods();

                  if(placeLikelihoodList == null) {
                    log("Result List is Null!!");
                    return;
                  }
                  // Show the top 5 possible location results.
                  for(int i = 0; i < placeLikelihoodList.size(); i++) {
                    PlaceLikelihood p = placeLikelihoodList.get(i);
                    log(p.getPlace().getName().toString()
                        + ", likelihood: " + p.getLikelihood());
                  }
                }
              });
          break;
        }

        case R.id.btn_get_weather: {
          if(ContextCompat.checkSelfPermission(
              MainActivity.this,
              android.Manifest.permission.ACCESS_FINE_LOCATION) !=
              PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                MainActivity.this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                100
            );
            return;
          }

          Awareness.SnapshotApi.getWeather(mGoogleApiClient)
              .setResultCallback(new ResultCallback<WeatherResult>() {
                @Override
                public void onResult(@NonNull WeatherResult weatherResult) {
                  if(!weatherResult.getStatus().isSuccess()) {
                    log("Could not get weather.");
                    return;
                  }
                  Weather weather = weatherResult.getWeather();
                  log("Weather: " + weather);
                }
              });

          break;
        }
      }
    }
  };
}