অ্যাওয়ারনেস এপিআই-তে, ফেন্স- এর ধারণাটি জিওফেন্সিং থেকে নেওয়া হয়েছে, যেখানে একটি ভৌগোলিক অঞ্চল বা জিওফেন্স সংজ্ঞায়িত করা হয় এবং যখন কোনো ব্যবহারকারী সেই জিওফেন্স অঞ্চলে প্রবেশ করে বা তা থেকে বেরিয়ে যায়, তখন অ্যাপটি কলব্যাক পায়। ফেন্স এপিআই ভৌগোলিক নৈকট্যের পাশাপাশি আরও অনেক প্রাসঙ্গিক শর্ত অন্তর্ভুক্ত করার জন্য জিওফেন্সিং-এর ধারণাটিকে আরও প্রসারিত করে। যখনই প্রাসঙ্গিক অবস্থার পরিবর্তন হয়, তখনই একটি অ্যাপ কলব্যাক পায়। উদাহরণস্বরূপ, যদি আপনার অ্যাপ হেডফোনের জন্য একটি ফেন্স সংজ্ঞায়িত করে, তবে হেডফোন প্লাগ ইন করা হলে এবং আনপ্লাগ করা হলে এটি কলব্যাক পাবে।
আপনি কনটেক্সট সিগন্যালের উপর ভিত্তি করে ফেন্স এপিআই (Fence API) ব্যবহার করে ফেন্স নির্ধারণ করতে পারেন, যেমন:
- ব্যবহারকারীর বর্তমান অবস্থান (অক্ষাংশ/দ্রাঘিমাংশ)
- ব্যবহারকারীর বর্তমান কার্যকলাপ, যেমন হাঁটা বা গাড়ি চালানো।
- ডিভাইস-নির্দিষ্ট শর্তাবলী, যেমন হেডফোন প্লাগ ইন করা আছে কি না।
- নিকটবর্তী বীকনগুলির সান্নিধ্য
Fence API আপনাকে AND , OR , এবং NOT বুলিয়ান অপারেটর ব্যবহার করে একাধিক কনটেক্সট সিগন্যাল একত্রিত করে ফেন্স তৈরি করার সুযোগ দেয়। এরপর যখনই ফেন্সের শর্তগুলো পূরণ হয়, আপনার অ্যাপ কলব্যাক পায়। সম্ভাব্য কিছু ফেন্সের উদাহরণ নিচে দেওয়া হলো:
- ব্যবহারকারী হেডফোন লাগিয়ে হাঁটতে শুরু করে।
- ব্যবহারকারী সপ্তাহের কোনো কর্মদিবসে বিকাল ৫টার আগে একটি ১০০-মিটার জিওফেন্সে প্রবেশ করেন।
- ব্যবহারকারী একটি নির্দিষ্ট BLE বীকনের পরিসীমার মধ্যে প্রবেশ করে।
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে এমন একটি বেড়া সংজ্ঞায়িত করতে হয় যা ব্যবহারকারী হাঁটার সময় সক্রিয় হয়:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
একবার বেড়া নির্ধারণ করে ফেললে, আপনাকে নিম্নলিখিত কাজগুলো অবশ্যই করতে হবে:
- কলব্যাক গ্রহণ করার জন্য ফেন্সটিকে রেজিস্টার করতে
updateFencesকল করুন। - একটি কলব্যাক সংজ্ঞায়িত করুন যা ফেন্সের অবস্থা পরিবর্তিত হলে আহ্বান করা যেতে পারে।
নিম্নলিখিত উদাহরণটি একটি ফেন্স তৈরি এবং রেজিস্টার করার পদ্ধতি দেখায়। এই উদাহরণে, ফেন্সটি ট্রিগার হলে ইনটেন্টটি হ্যান্ডেল করার জন্য BroadcastReceiver এর একটি কাস্টম সাবক্লাস ব্যবহার করা হয়েছে।
Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()
.addFence(FENCE_KEY, exercisingWithHeadphonesFence, mPendingIntent)
.build())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i(TAG, "Fence was successfully registered.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Fence could not be registered: " + e);
}
});
public class FenceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
FenceState fenceState = FenceState.extract(intent);
if (TextUtils.equals(fenceState.getFenceKey(), FENCE_KEY)) {
String fenceStateStr;
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
fenceStateStr = "true";
break;
case FenceState.FALSE:
fenceStateStr = "false";
break;
case FenceState.UNKNOWN:
fenceStateStr = "unknown";
break;
default:
fenceStateStr = "unknown value";
}
mLogFragment.getLogView().println("Fence state: " + fenceStateStr);
}
}
}