このセクションでは、Snapshot API を使用して、サポートされている各コンテキスト タイプの現在の状態を取得する方法について説明します。詳細については、スタートガイドをご覧ください。非推奨のコンテキスト シグナルの詳細については、次の展開可能な通知を開いてください。
現在のアクティビティを取得する
ユーザーの現在のアクティビティを取得するには、getDetectedActivity() を呼び出します。このメソッドは、ユーザーの最新のアクティビティに関する情報を含む ActivityRecognitionResult を返します。
getDetectedActivity() メソッドには com.google.android.gms.permission.ACTIVITY_RECOGNITION 権限が必要です。この権限を AndroidManifest.xml に追加します。
ユーザーの現在のアクティビティを取得する手順は次のとおりです。
- getSnapshotClient()を呼び出して- SnapshotClientのインスタンスを作成します。
- addOnSuccessListenerを使用して、- DetectedActivityResponseをリッスンできる- OnSuccessListenerを作成します。
- getStatus()を呼び出して、結果が有効であることを確認します。
- DetectedActivityResponse.getActivityRecognitionResult()を呼び出して、- ActivityRecognitionResultを返します。これを使用して、ユーザーの現在のアクティビティのさまざまな側面を取得できます。次に例を示します。- getMostProbableActivity()を呼び出して、最も可能性の高いアクティビティのみを取得します。
- getProbableActivities()を呼び出して、確率でランク付けされた最近のアクティビティのリストを取得します。
- getActivityConfidence()を呼び出して、指定されたアクティビティ タイプの信頼値を返します。
- hasResult()を呼び出して、- Intentに- 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 キーとスタートガイドをご覧ください。
近くのビーコンに関する情報を取得する手順は次のとおりです。
- ユーザーが必要な権限を付与しているかどうかを確認します。次の例では、 - 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; }
- 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"));
- getSnapshotClient.getBeaconState()を呼び出します。
- addOnSuccessListenerを使用して、- BeaconStateResponseをリッスンできる- OnSuccessListenerを作成します。
- getStatus()を呼び出して、結果が有効であることを確認します。
- BeaconStateResponse.getBeaconState()を呼び出して、ビーコンの状態を返します。
- 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 を取得できます。
現在のヘッドホンの状態を取得する手順は次のとおりです。
- getSnapshotClient.getHeadphoneState()を呼び出します。
- addOnSuccessListenerを使用して、- HeadphoneStateResponseをリッスンできる- OnSuccessListenerを作成します。
- getStatus()を呼び出して、結果が有効であることを確認します。
- 成功した場合、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 に追加します。
現在地を取得する手順は次のとおりです。
- ユーザーが必要な権限を付与しているかどうかを確認します。次の例では、 - 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; }
- getSnapshotClient.getLocation()を呼び出します。
- addOnSuccessListenerを使用して、- LocationResponseをリッスンできる- OnSuccessListenerを作成します。
- getStatus()を呼び出して、結果が有効であることを確認します。
- LocationResponse.getLocation()を呼び出して、現在の- Locationを返します。
次の例は、現在地を取得する方法を示しています。
Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })