このセクションでは、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();
}
})