Hàng rào xác định một hoặc nhiều điều kiện bối cảnh mà ứng dụng có thể phản ứng. Khi trạng thái của hàng rào thay đổi, ứng dụng sẽ nhận được lệnh gọi lại.
Có hai loại hàng rào: hàng rào nguyên thủy, đại diện cho bộ tín hiệu ngữ cảnh cơ bản và hàng rào kết hợp, kết hợp nhiều hàng rào nguyên thủy với việc sử dụng toán tử boolean. Tất cả hàng rào là các bản sao của AwarenessFence
.
Tạo hàng rào nguyên thủy
Hàng rào chính, đại diện cho tập hợp các tín hiệu ngữ cảnh cơ bản, được xác định trong gói awareness.fence
. Ví dụ sau đây minh hoạ cách tạo một hàng rào đơn giản là TRUE
khi hoạt động đã phát hiện của người dùng là WALKING
và FALSE
nếu không:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Trong ví dụ trước, DetectedActivityFence
được tạo bằng lệnh gọi during
, có nghĩa là hàng rào ở trạng thái TRUE
bất cứ khi nào người dùng WALKING
.
Phản ứng với chuyển đổi
Mỗi loại hàng rào nguyên gốc, ngoại trừ TimeFence
, cũng có thể được kích hoạt ngay lập tức khi trạng thái ngữ cảnh chuyển đổi. Ví dụ: bạn có thể đặt DetectedActivityFence
để kích hoạt ngay lập tức khi người dùng đang starting
hoặc stopping
. Các hàng rào chuyển đổi ở trạng thái TRUE
trong vài giây trước khi chuyển lại FALSE
.
Tạo hàng rào kết hợp
Hàng rào kết hợp kết hợp nhiều loại hàng rào nguyên thủy với việc sử dụng các toán tử boolean. Ví dụ sau đây cho thấy việc tạo hàng rào kết hợp sẽ kích hoạt khi người dùng đi bộ và cắm tai nghe:
// Create the primitive fences.
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
AwarenessFence headphoneFence = HeadphoneFence.during(HeadphoneState.PLUGGED_IN);
// Create a combination fence to AND primitive fences.
AwarenessFence walkingWithHeadphones = AwarenessFence.and(
walkingFence, headphoneFence
);
Các cây lồng nhau của AND
, OR
và NOT
là hợp lệ, vì vậy, bạn có thể kết hợp boolean với hàng rào bất kỳ. Ví dụ sau đây cho thấy một hàng rào được kích hoạt khi người dùng di chuyển hơn 100 m từ vị trí hiện tại hoặc hơn một giờ, kể từ thời điểm hiện tại.
double currentLocationLat; // current location latitude
double currentLocationLng; // current location longitude
long nowMillis = System.currentTimeMillis();
long oneHourMillis = 1L * 60L * 60L * 1000L;
AwarenessFence orExample = AwarenessFence.or(
AwarenessFence.not(LocationFence.in(
currentLocationLat,
currentLocationLng,
100.0,
100.0,
0L)),
TimeFence.inInterval(nowMillis + oneHourMillis, Long.MAX_VALUE));
Bước tiếp theo: Đăng ký hàng rào.