حصار یک یا چند شرایط زمینه را تعریف می کند که برنامه شما می تواند به آن واکنش نشان دهد. هنگامی که وضعیت حصار تغییر می کند، برنامه شما یک تماس پاسخ دریافت می کند.
دو نوع حصار وجود دارد: حصارهای اولیه که مجموعه اولیه سیگنال های زمینه را نشان می دهند و حصارهای ترکیبی که چندین حصار اولیه را با استفاده از عملگرهای بولی ترکیب می کنند. همه نرده ها نمونه هایی از AwarenessFence
هستند.
یک حصار بدوی ایجاد کنید
حصارهای اولیه، که مجموعه اصلی سیگنال های زمینه را نشان می دهند، در بسته awareness.fence
تعریف شده اند. مثال زیر ایجاد یک حصار ساده را نشان میدهد که وقتی فعالیت شناساییشده کاربر WALKING
باشد TRUE
و در غیر این صورت FALSE
:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
در مثال قبل، DetectedActivityFence
با فراخوانی در during
ایجاد شد، به این معنی که هر زمان که کاربر در WALKING
است، حصار در حالت TRUE
قرار دارد.
به انتقال ها واکنش نشان دهید
هر نوع حصار ابتدایی، به استثنای TimeFence
، همچنین میتواند بهطور لحظهای هنگام انتقال حالت زمینه فعال شود. برای مثال، میتوانید یک DetectedActivityFence
را تنظیم کنید تا زمانی که کاربر در starting
یا stopping
فعالیت است، بهطور لحظهای فعال شود. حصارهای انتقالی برای چند ثانیه قبل از اینکه دوباره FALSE
شوند در حالت TRUE
قرار دارند.
یک حصار ترکیبی ایجاد کنید
نرده های ترکیبی چندین نوع حصار ابتدایی را با استفاده از عملگرهای بولی ترکیب می کنند. مثال زیر ایجاد یک حصار ترکیبی را نشان می دهد که هنگام راه رفتن کاربر و اتصال هدفون به برق فعال می شود:
// 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));
مرحله بعدی: ثبت حصار .