יצירת גדר

גדר מגדירה תנאי הקשר אחד או יותר שהאפליקציה יכולה להגיב לה. כשמצב של גדר משתנה, האפליקציה מקבלת קריאה חוזרת.

יש שני סוגים של גדרות: גדרות פרימיות שמייצגות סדרה בסיסית של אותות הקשר, וגדרות משולבות משולבות בגדרות בוליאניות. כל הגדרות הם מופעים של AwarenessFence.

יצירת גדר מהדור הישן

גדרות פרימיות, שמייצגות את הקבוצה הבסיסית של אותות הקשר, מוגדרות בחבילה awareness.fence. בדוגמה הבאה מוצגת יצירה של גדר פשוט: TRUE כשפעילות המשתמש מזוהה היא WALKING, אחרת FALSE:

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

בדוגמה הקודמת, השדה DetectedActivityFence נוצר על ידי קריאה ל-during, כלומר הגדר נמצא במצב TRUE בכל פעם שהמשתמש נמצא ב-WALKING.

תגובה להעברות

כל סוג של גדר מהדור הישן, מלבד TimeFence, יכול להיות מופעל גם הוא מעט לאחר המעבר למצב הקשר. לדוגמה, אפשר להגדיר ש-DetectedActivityFence יופעל מיד כאשר משתמש הוא starting או פעילות של stopping. גדרות המעבר נמצאות במצב TRUE למשך כמה שניות לפני שהן מועברות שוב ל-FALSE.

יצירת גדר משולבת

גדרות משולבות משלבות מספר סוגים של גדרות בוליאניות עם מפעילים בוליאניים. בדוגמה הבאה מוצגת יצירה של גדר משולב שפועלת כשהמשתמשים הולכים וגם אם האוזניות מחוברות:

// 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
);

העצים המוצבים בתוך AND, OR ו-NOT הם תקינים, כך ששילוב בוליאני של גדרות הוא אפשרי. בדוגמה הבאה מוצג גדר שמופעל על ידי משתמש שזז יותר מ-100 מטר מהמיקום הנוכחי, או שחלפו יותר משעה מהתאריך הנוכחי.

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));

השלב הבא: רישום גדר.