스냅샷 데이터 가져오기

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

현재 활동 가져오기

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

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 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);
        }
    });

위치 가져오기

LocationResponse를 반환하는 getLocation()를 호출하여 사용자의 현재 위치 (위도-경도)를 가져올 수 있습니다. 그런 다음 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();
        }
    })