یک حصار (fences) یک یا چند شرایط زمینهای را تعریف میکند که برنامه شما میتواند به آنها واکنش نشان دهد. وقتی وضعیت یک حصار تغییر میکند، برنامه شما یک فراخوانی (callback) دریافت میکند.
There are two types of fences: primitive fences, which represent the basic set of context signals, and combination fences, which combine multiple primitive fences with the use of boolean operators. All fences are instances of AwarenessFence .
یک حصار اولیه ایجاد کنید
حصارهای اولیه، که نشاندهندهی مجموعهی اولیهی سیگنالهای زمینهای هستند، در بستهی awareness.fence تعریف شدهاند. مثال زیر ایجاد یک حصار ساده را نشان میدهد که وقتی فعالیت شناساییشدهی کاربر WALKING باشد، TRUE و در غیر این صورت FALSE :
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
در مثال قبلی، DetectedActivityFence با فراخوانی during ایجاد شد، به این معنی که هر زمان که کاربر در WALKING باشد، حصار در حالت TRUE قرار دارد.
واکنش به انتقالها
هر نوع حصار اولیه، به استثنای 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 معتبر هستند، بنابراین هر ترکیب بولی از fenceها امکانپذیر است. مثال زیر یک fence را نشان میدهد که وقتی کاربر بیش از ۱۰۰ متر از مکان فعلی خود دور میشود یا بیش از یک ساعت از زمان فعلی گذشته است، فعال میشود.
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));
مرحله بعدی: ثبت نرده .