Awareness API-তে, ফেন্স-এর ধারণাটি জিওফেন্সিং থেকে নেওয়া হয়েছে, যেখানে একটি ভৌগোলিক অঞ্চল বা জিওফেন্স সংজ্ঞায়িত করা হয় এবং ব্যবহারকারী জিওফেন্স অঞ্চলে প্রবেশ করলে বা সেখান থেকে বেরিয়ে গেলে, অ্যাপ কলব্যাক পায়। Fence API, জিওফেন্সিংয়ের ধারণাকে আরও প্রসারিত করে যাতে ভৌগোলিক নৈকট্য ছাড়াও আরও অনেক প্রাসঙ্গিক পরিস্থিতি অন্তর্ভুক্ত করা যায়। যখনই কনটেক্সট স্টেট ট্রানজিশন হয়, তখনই অ্যাপ কলব্যাক পায়। যেমন, আপনার অ্যাপ হেডফোনের জন্য কোনও ফেন্স নির্ধারণ করলে, হেডফোন প্লাগ-ইন ও প্লাগ-আউট করার সময় এটি কলব্যাক পায়।
আপনি 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);
}
}
}