스냅샷 데이터 가져오기

이 섹션에서는 스냅샷 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 Play 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();
        }
    })