Hàng rào xác định một hoặc nhiều điều kiện ngữ cảnh mà ứng dụng của bạn 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 gốc đại diện cho tập hợp 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 gốc bằng cách sử dụng toán tử boolean. Tất cả hàng rào đều là các thực thể của AwarenessFence
.
Tạo hàng rào nguyên thuỷ
Hàng rào nguyên gốc (primitive fence) đại diện cho tập hợp tín hiệu bối cảnh cơ bản được xác định trong gói awareness.fence
. Ví dụ sau đây cho thấy cách tạo một hàng rào đơn giản là TRUE
khi hoạt động được 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 đến during
, nghĩa là hàng rào ở trạng thái TRUE
bất cứ khi nào người dùng là WALKING
.
Phản ứng với các hiệu ứng 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 tạm thời khi trạng thái ngữ cảnh chuyển đổi. Ví dụ: bạn có thể đặt DetectedActivityFence
để kích hoạt tạm thời khi người dùng starting
hoặc stopping
một hoạt động. Hàng rào chuyển đổi ở trạng thái TRUE
trong vài giây trước khi chuyển sang FALSE
trở lại.
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 gốc bằng cách sử dụng toán tử Boolean. Ví dụ sau đây cho thấy cách tạo một 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â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 bất kỳ giá trị boolean nào của hàng rào. 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 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.