スナップショット データの取得

このセクションでは、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 を使用して、OnSuccessListener をリッスンできる BeaconStateResponse を作成します。

  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 を使用して、OnSuccessListener をリッスンできる HeadphoneStateResponse を作成します。
  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 を取得できます。

The 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 を使用して、OnSuccessListener をリッスンできる LocationResponse を作成します。

  4. getStatus() を呼び出して、結果が有効であることを確認します。

  5. LocationResponse.getLocation() を呼び出して、現在の Location を返します。

次の例は、現在のロケーションを取得する方法を示しています。

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