יצירת גדר

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

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

יצירת גדר פרימיטיבית

גדרות פרימיטיביות, שמייצגות את קבוצת אותות ההקשר הבסיסית, מוגדרות בחבילה awareness.fence. בדוגמה הבאה מוצג יצירה של גדר פשוטה שמוגדרת כ-TRUE when the user's detected activity is WALKING, and FALSE otherwise:

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

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