스냅샷 데이터 가져오기

이 섹션에서는 Snapshot API를 사용하여 지원되는 각 컨텍스트 유형의 현재 상태를 가져오는 방법을 보여줍니다. 자세한 내용은 시작하기를 참고하세요. 지원 중단된 문맥 시그널에 관한 자세한 내용은 다음과 같이 펼쳐지는 알림을 참고하세요.

현재 활동 가져오기

사용자의 현재 활동을 가져오려면 getDetectedActivity()를 호출합니다. 그러면 사용자의 최근 활동에 관한 정보가 포함된 ActivityRecognitionResult가 반환됩니다.

getDetectedActivity() 메서드에는 com.google.android.gms.permission.ACTIVITY_RECOGNITION 권한이 필요합니다. AndroidManifest.xml에 이 권한을 추가합니다.

사용자의 현재 활동을 가져오려면 다음 단계를 따르세요.

  1. getSnapshotClient()를 호출하여 SnapshotClient의 인스턴스를 만듭니다.
  2. addOnSuccessListener를 사용하여 DetectedActivityResponse를 수신 대기할 수 있는 OnSuccessListener를 만듭니다.
  3. getStatus()를 호출하여 결과가 유효한지 확인합니다.
  4. DetectedActivityResponse.getActivityRecognitionResult()를 호출하여 ActivityRecognitionResult를 반환합니다. 이를 사용하여 사용자의 현재 활동에 관한 다양한 측면을 가져올 수 있습니다. 예를 들면 다음과 같습니다.

다음 코드 예에서는 getMostProbableActivity()를 사용하여 감지된 활동 중 가장 가능성이 높은 활동을 가져오고 결과를 콘솔에 로깅합니다.

Awareness.getSnapshotClient(this).getDetectedActivity()
    .addOnSuccessListener(new OnSuccessListener<DetectedActivityResponse>() {
        @Override
        public void onSuccess(DetectedActivityResponse dar) {
            ActivityRecognitionResult arr = dar.getActivityRecognitionResult();
            DetectedActivity probableActivity = arr.getMostProbableActivity();

            int confidence = probableActivity.getConfidence();
            String activityStr = probableActivity.toString();
            mLogFragment.getLogView().println("Activity: " + activityStr
                + ", Confidence: " + confidence + "/100");
        }
    })

주변 비콘 가져오기

주변 비콘에 대한 정보를 가져오려면 getBeaconState()를 호출합니다. 비콘 데이터는 첨부파일의 콘텐츠, 유형, 네임스페이스로 구성됩니다.

getBeaconState() 메서드에는 android.permission.ACCESS_FINE_LOCATION 권한이 필요합니다. 이 권한을 AndroidManifest.xml에 추가합니다. 또한 Google Developers Console 프로젝트에 Nearby Messages API를 활성화해야 합니다. 자세한 내용은 가입 및 API 키시작하기를 참고하세요.

근처 비콘에 대한 정보를 가져오려면 다음 단계를 따르세요.

  1. 사용자가 필요한 권한을 부여했는지 확인합니다. 다음 예에서는 android.permission.ACCESS_FINE_LOCATION 권한이 부여되었는지 확인합니다. 그렇지 않으면 사용자에게 동의 메시지가 표시됩니다.

    if (ContextCompat.checkSelfPermission(
                MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
            );
            return;
        }
    
  2. BeaconState.TypeFilter를 정의합니다. 지정된 네임스페이스 및 유형에 등록된 첨부파일이 있는 비콘만 반환됩니다. 첨부파일 콘텐츠의 바이트 대 바이트 일치를 기준으로 필터링할 수도 있습니다. 다음 예는 유형 필터를 만드는 방법을 보여줍니다.

    private static final List<BeaconState.TypeFilter> BEACON_TYPE_FILTERS = Arrays.asList(
            BeaconState.TypeFilter.with(
                "my.beacon.namespace",
                "my-attachment-type"),
            BeaconState.TypeFilter.with(
                "my.other.namespace",
                "my-attachment-type"));
    
  3. getSnapshotClient.getBeaconState()을 호출합니다.

  4. addOnSuccessListener를 사용하여 BeaconStateResponse를 수신 대기할 수 있는 OnSuccessListener를 만듭니다.

  5. getStatus()를 호출하여 결과가 유효한지 확인합니다.

  6. BeaconStateResponse.getBeaconState()를 호출하여 비콘 상태를 반환합니다.

  7. BeaconState.getBeaconInfo()를 호출하여 BeaconState.BeaconInfo을 가져옵니다.

다음 예는 비콘 정보를 가져오는 방법을 보여줍니다.

Awareness.getSnapshotClient(this).getBeaconState(BEACON_TYPE_FILTERS)
    .addOnSuccessListener(new OnSuccessListener<BeaconStateResponse>() {
        @Override
        public void onSuccess(BeaconStateResponse beaconStateResponse) {
            BeaconStateResult beaconStateResult = beaconStateResponse.getBeaconState();
            BeaconState.BeaconInfo beaconInfo = beaconStateResponse.getBeaconInfo();
        }
    })

헤드폰 상태 가져오기

헤드폰이 기기에 연결되어 있는지 감지하려면 getHeadphoneState()를 호출합니다. 그러면 OnSuccessListener가 감지로 설정된 HeadphoneStateResponse 감지 상태가 생성됩니다. 그런 다음 getHeadphoneState()를 호출하여 HeadphoneState를 가져올 수 있습니다.

현재 헤드폰 상태를 가져오려면 다음 단계를 따르세요.

  1. getSnapshotClient.getHeadphoneState()을 호출합니다.
  2. addOnSuccessListener를 사용하여 HeadphoneStateResponse를 수신 대기할 수 있는 OnSuccessListener를 만듭니다.
  3. getStatus()를 호출하여 결과가 유효한지 확인합니다.
  4. 성공하면 HeadphoneStateResponse.getHeadphoneState()를 호출하여 헤드폰 상태를 반환합니다. 이 값은 PLUGGED_IN 또는 UNPLUGGED입니다.

다음 코드 예는 getHeadphoneState() 사용 방법을 보여줍니다.

Awareness.getSnapshotClient(this).getHeadphoneState()
    .addOnSuccessListener(new OnSuccessListener<HeadphoneStateResponse>() {
        @Override
        public void onSuccess(HeadphoneStateResponse headphoneStateResponse) {
            HeadphoneState headphoneState = headphoneStateResponse.getHeadphoneState();
            boolean pluggedIn = headphoneState.getState() == HeadphoneState.PLUGGED_IN;
            String stateStr =
                "Headphones are " + (pluggedIn ? "plugged in" : "unplugged");
            mLogFragment.getLogView().println(stateStr);
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, "Could not get headphone state: " + e);
        }
    });

위치 가져오기

getLocation()를 호출하여 사용자의 현재 위치 (위도-경도)를 가져올 수 있으며, 이 호출은 LocationResponse를 반환합니다. 그런 다음 LocationResponse.getLocation()를 호출하여 현재 위치 데이터가 포함된 Location를 가져올 수 있습니다.

getLocation() 메서드에는 android.permission.ACCESS_FINE_LOCATION 권한이 필요합니다. 이 권한을 AndroidManifest.xml에 추가합니다.

현재 위치를 가져오려면 다음 단계를 따르세요.

  1. 사용자가 필요한 권한을 부여했는지 확인합니다. 다음 예는 android.permission.ACCESS_FINE_LOCATION 권한이 부여되었는지 확인합니다. 그렇지 않으면 사용자에게 동의 메시지가 표시됩니다.

    
    if (ContextCompat.checkSelfPermission(
                MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
            );
            return;
        }
    
  2. getSnapshotClient.getLocation()을 호출합니다.

  3. addOnSuccessListener를 사용하여 LocationResponse를 수신 대기할 수 있는 OnSuccessListener를 만듭니다.

  4. getStatus()를 호출하여 결과가 유효한지 확인합니다.

  5. LocationResponse.getLocation()를 호출하여 현재 Location를 반환합니다.

다음 예는 현재 위치를 가져오는 방법을 보여줍니다.

Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })