Tạo hàng rào

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à WALKINGFALSE 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ộ 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, ORNOT 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.