このセクションでは、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 Cloud 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
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);
}
});
ロケーションの取得
ユーザーの現在地(緯度と経度)を取得するには、LocationResponse
を返す getLocation()
を呼び出します。その後、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();
}
})