জিওফেন্সিং ব্যবহারকারীর বর্তমান অবস্থান সম্পর্কে সচেতনতা এবং আগ্রহের স্থানগুলির সান্নিধ্য সম্পর্কে সচেতনতাকে একত্রিত করে। আগ্রহের স্থান চিহ্নিত করতে, আপনাকে এর অক্ষাংশ এবং দ্রাঘিমাংশ নির্দিষ্ট করতে হবে। অবস্থানের সান্নিধ্য সামঞ্জস্য করতে, আপনাকে একটি ব্যাসার্ধ যোগ করতে হবে। অক্ষাংশ, দ্রাঘিমাংশ এবং ব্যাসার্ধ একটি জিওফেন্সকে সংজ্ঞায়িত করে, আগ্রহের স্থানের চারপাশে একটি বৃত্তাকার এলাকা বা বেড়া তৈরি করে।
আপনার একাধিক সক্রিয় জিওফেন্স থাকতে পারে, প্রতি ডিভাইস ব্যবহারকারীর জন্য প্রতি অ্যাপে ১০০টি সীমা সহ। প্রতিটি জিওফেন্সের জন্য, আপনি লোকেশন সার্ভিসেসকে আপনাকে প্রবেশ এবং প্রস্থান ইভেন্টগুলি পাঠাতে বলতে পারেন, অথবা আপনি কোনও ইভেন্ট ট্রিগার করার আগে জিওফেন্স এলাকার মধ্যে অপেক্ষা করার বা থাকার সময়কাল নির্দিষ্ট করতে পারেন। মিলিসেকেন্ডে মেয়াদোত্তীর্ণ সময়কাল নির্দিষ্ট করে আপনি যেকোনো জিওফেন্সের সময়কাল সীমাবদ্ধ করতে পারেন। জিওফেন্সের মেয়াদ শেষ হওয়ার পরে, লোকেশন সার্ভিসেস স্বয়ংক্রিয়ভাবে এটি সরিয়ে দেয়।

এই পাঠে আপনাকে দেখানো হবে কিভাবে জিওফেন্স যোগ করতে এবং অপসারণ করতে হয়, এবং তারপর একটি BroadcastReceiver ব্যবহার করে জিওফেন্স ট্রানজিশন শুনতে হয়।
দ্রষ্টব্য: Wear ডিভাইসে, জিওফেন্সিং API গুলি পাওয়ারের দক্ষ ব্যবহার করে না। আমরা Wear-এ এই API গুলি সুপারিশ করি না। আরও তথ্যের জন্য "পাওয়ার এবং ব্যাটারি সংরক্ষণ করুন" পড়ুন।
জিওফেন্স পর্যবেক্ষণের জন্য সেট আপ করুন
জিওফেন্স পর্যবেক্ষণের অনুরোধের প্রথম ধাপ হল প্রয়োজনীয় অনুমতির অনুরোধ করা। জিওফেন্সিং ব্যবহার করার জন্য, আপনার অ্যাপকে নিম্নলিখিতগুলি অনুরোধ করতে হবে:
-
ACCESS_FINE_LOCATION - যদি আপনার অ্যাপটি Android 10 (API লেভেল 29) বা তার উচ্চতর ভার্সনকে টার্গেট করে তাহলে
ACCESS_BACKGROUND_LOCATION
আরও জানতে, অবস্থানের অনুমতি কীভাবে অনুরোধ করবেন তার নির্দেশিকাটি দেখুন।
জিওফেন্স ট্রানজিশন শোনার জন্য যদি আপনি একটি BroadcastReceiver ব্যবহার করতে চান, তাহলে পরিষেবার নাম উল্লেখ করে একটি উপাদান যোগ করুন। এই উপাদানটি অবশ্যই <application> উপাদানের একটি শিশু হতে হবে:
<application android:allowBackup="true"> ... <receiver android:name=".GeofenceBroadcastReceiver"/> <application/>
লোকেশন API গুলি অ্যাক্সেস করতে, আপনাকে জিওফেন্সিং ক্লায়েন্টের একটি উদাহরণ তৈরি করতে হবে। আপনার ক্লায়েন্টকে কীভাবে সংযুক্ত করবেন তা শিখতে:
কোটলিন
lateinit var geofencingClient: GeofencingClient override fun onCreate(savedInstanceState: Bundle?) { // ... geofencingClient = LocationServices.getGeofencingClient(this) }
জাভা
private GeofencingClient geofencingClient; @Override public void onCreate(Bundle savedInstanceState) { // ... geofencingClient = LocationServices.getGeofencingClient(this); }
জিওফেন্স তৈরি করুন এবং যোগ করুন
আপনার অ্যাপকে জিওফেন্স অবজেক্ট তৈরির জন্য লোকেশন API এর বিল্ডার ক্লাস এবং সেগুলি যোগ করার জন্য কনভিনিয়েন্স ক্লাস ব্যবহার করে জিওফেন্স তৈরি এবং যোগ করতে হবে। এছাড়াও, জিওফেন্স ট্রানজিশনের সময় লোকেশন সার্ভিসেস থেকে প্রেরিত ইন্টেন্টগুলি পরিচালনা করার জন্য, আপনি এই বিভাগে দেখানো একটি PendingIntent সংজ্ঞায়িত করতে পারেন।
দ্রষ্টব্য: একক-ব্যবহারকারী ডিভাইসের ক্ষেত্রে, প্রতি অ্যাপে ১০০টি জিওফেন্সের সীমা রয়েছে। একাধিক-ব্যবহারকারী ডিভাইসের ক্ষেত্রে, প্রতি ডিভাইস ব্যবহারকারীর জন্য প্রতি অ্যাপে ১০০টি জিওফেন্সের সীমা রয়েছে।
জিওফেন্স অবজেক্ট তৈরি করুন
প্রথমে, জিওফেন্স তৈরি করতে Geofence.Builder ব্যবহার করুন, জিওফেন্সের জন্য পছন্দসই ব্যাসার্ধ, সময়কাল এবং ট্রানজিশনের ধরণ নির্ধারণ করুন। উদাহরণস্বরূপ, একটি তালিকা বস্তু পূরণ করতে:
কোটলিন
geofenceList.add(Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.key) // Set the circular region of this geofence. .setCircularRegion( entry.value.latitude, entry.value.longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) // Set the expiration duration of the geofence. This geofence gets automatically // removed after this period of time. .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) // Set the transition types of interest. Alerts are only generated for these // transition. We track entry and exit transitions in this sample. .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT) // Create the geofence. .build())
জাভা
geofenceList.add(new Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.getKey()) .setCircularRegion( entry.getValue().latitude, entry.getValue().longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .build());
এই উদাহরণটি একটি ধ্রুবক ফাইল থেকে ডেটা টেনে আনে। বাস্তবে, অ্যাপগুলি ব্যবহারকারীর অবস্থানের উপর ভিত্তি করে গতিশীলভাবে জিওফেন্স তৈরি করতে পারে।
জিওফেন্স এবং প্রাথমিক ট্রিগার নির্দিষ্ট করুন
নিম্নলিখিত স্নিপেটটি GeofencingRequest ক্লাস এবং এর নেস্টেড GeofencingRequestBuilder ক্লাস ব্যবহার করে কোন জিওফেন্সগুলি পর্যবেক্ষণ করতে হবে এবং সম্পর্কিত জিওফেন্স ইভেন্টগুলি কীভাবে ট্রিগার করা হবে তা সেট করতে:
কোটলিন
private fun getGeofencingRequest(): GeofencingRequest { return GeofencingRequest.Builder().apply { setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER) addGeofences(geofenceList) }.build() }
জাভা
private GeofencingRequest getGeofencingRequest() { GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER); builder.addGeofences(geofenceList); return builder.build(); }
এই উদাহরণে দুটি জিওফেন্স ট্রিগারের ব্যবহার দেখানো হয়েছে। যখন একটি ডিভাইস একটি জিওফেন্সে প্রবেশ করে তখন GEOFENCE_TRANSITION_ENTER ট্রানজিশন ট্রিগার হয় এবং যখন একটি ডিভাইস একটি জিওফেন্স থেকে বেরিয়ে আসে তখন GEOFENCE_TRANSITION_EXIT ট্রানজিশন ট্রিগার হয়। INITIAL_TRIGGER_ENTER নির্দিষ্ট করলে লোকেশন পরিষেবাগুলিকে বলা হয় যে যদি ডিভাইসটি ইতিমধ্যেই জিওফেন্সের ভিতরে থাকে তবে GEOFENCE_TRANSITION_ENTER ট্রিগার করা উচিত।
অনেক ক্ষেত্রে, এর পরিবর্তে INITIAL_TRIGGER_DWELL ব্যবহার করা বাঞ্ছনীয় হতে পারে, যা শুধুমাত্র তখনই ইভেন্টগুলিকে ট্রিগার করে যখন ব্যবহারকারী একটি জিওফেন্সের মধ্যে একটি নির্দিষ্ট সময়ের জন্য থামে। এই পদ্ধতিটি "সতর্কতা স্প্যাম" কমাতে সাহায্য করতে পারে যা একটি ডিভাইস সংক্ষিপ্তভাবে জিওফেন্সে প্রবেশ এবং প্রস্থান করার সময় বিপুল সংখ্যক বিজ্ঞপ্তির ফলে ঘটে। আপনার জিওফেন্স থেকে সেরা ফলাফল পাওয়ার আরেকটি কৌশল হল ন্যূনতম 100 মিটার ব্যাসার্ধ সেট করা। এটি সাধারণ Wi-Fi নেটওয়ার্কগুলির অবস্থান নির্ভুলতার জন্য হিসাব করতে সাহায্য করে এবং ডিভাইসের বিদ্যুৎ খরচ কমাতেও সাহায্য করে।
জিওফেন্স ট্রানজিশনের জন্য একটি ব্রডকাস্ট রিসিভার নির্ধারণ করুন
লোকেশন সার্ভিসেস থেকে পাঠানো একটি Intent আপনার অ্যাপে বিভিন্ন অ্যাকশন ট্রিগার করতে পারে, কিন্তু আপনার এটি দিয়ে কোনও অ্যাক্টিভিটি বা ফ্র্যাগমেন্ট শুরু করা উচিত নয় , কারণ উপাদানগুলি কেবল ব্যবহারকারীর অ্যাকশনের প্রতিক্রিয়ায় দৃশ্যমান হওয়া উচিত। অনেক ক্ষেত্রে, একটি BroadcastReceiver একটি জিওফেন্স ট্রানজিশন পরিচালনা করার একটি ভাল উপায়। একটি BroadcastReceiver কোনও ইভেন্ট ঘটলে আপডেট পায়, যেমন একটি জিওফেন্সে বা বাইরে ট্রানজিশন, এবং দীর্ঘমেয়াদী ব্যাকগ্রাউন্ড কাজ শুরু করতে পারে।
নিম্নলিখিত স্নিপেটটি দেখায় যে কীভাবে একটি PendingIntent সংজ্ঞায়িত করতে হয় যা একটি BroadcastReceiver শুরু করে:
কোটলিন
class MainActivity : AppCompatActivity() { // ... private val geofencePendingIntent: PendingIntent by lazy { val intent = Intent(this, GeofenceBroadcastReceiver::class.java) // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) } }
জাভা
public class MainActivity extends AppCompatActivity { // ... private PendingIntent getGeofencePendingIntent() { // Reuse the PendingIntent if we already have it. if (geofencePendingIntent != null) { return geofencePendingIntent; } Intent intent = new Intent(this, GeofenceBroadcastReceiver.class); // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when // calling addGeofences() and removeGeofences(). geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent. FLAG_UPDATE_CURRENT); return geofencePendingIntent; }
জিওফেন্স যোগ করুন
জিওফেন্স যোগ করতে, পদ্ধতি ব্যবহার করুন। GeofencingClient.addGeofences()GeofencingRequest অবজেক্ট এবং PendingIntent প্রদান করুন। নিম্নলিখিত স্নিপেটটি ফলাফল প্রক্রিয়াকরণ প্রদর্শন করে:
কোটলিন
geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run { addOnSuccessListener { // Geofences added // ... } addOnFailureListener { // Failed to add geofences // ... } }
জাভা
geofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences added // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to add geofences // ... } });
জিওফেন্স ট্রানজিশন পরিচালনা করুন
যখন লোকেশন সার্ভিসেস সনাক্ত করে যে ব্যবহারকারী একটি জিওফেন্সে প্রবেশ করেছেন বা প্রস্থান করেছেন, তখন এটি জিওফেন্স যোগ করার অনুরোধে আপনি যে PendingIntent অন্তর্ভুক্ত করেছেন তাতে থাকা Intent পাঠায়। GeofenceBroadcastReceiver মতো একটি ব্রডকাস্ট রিসিভার লক্ষ্য করে যে Intent চালু করা হয়েছে এবং তারপর ইন্টেন্ট থেকে জিওফেন্সিং ইভেন্টটি পেতে পারে, জিওফেন্স ট্রানজিশনের ধরণ নির্ধারণ করতে পারে এবং কোনটি সংজ্ঞায়িত জিওফেন্স ট্রিগার করা হয়েছে তা নির্ধারণ করতে পারে। ব্রডকাস্ট রিসিভার একটি অ্যাপকে ব্যাকগ্রাউন্ডের কাজ শুরু করতে নির্দেশ দিতে পারে অথবা, যদি ইচ্ছা হয়, আউটপুট হিসাবে একটি বিজ্ঞপ্তি পাঠাতে পারে।
দ্রষ্টব্য: অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) এবং তার উচ্চতর সংস্করণে, যদি কোনও অ্যাপ জিওফেন্স পর্যবেক্ষণ করার সময় ব্যাকগ্রাউন্ডে চলমান থাকে, তাহলে ডিভাইসটি প্রতি কয়েক মিনিট অন্তর জিওফেন্সিং ইভেন্টগুলিতে সাড়া দেয়। এই প্রতিক্রিয়া সীমার সাথে আপনার অ্যাপকে কীভাবে খাপ খাইয়ে নেবেন তা জানতে, ব্যাকগ্রাউন্ড লোকেশন লিমিট দেখুন।
নিচের স্নিপেটে দেখানো হয়েছে কিভাবে একটি BroadcastReceiver সংজ্ঞায়িত করতে হয় যা জিওফেন্স ট্রানজিশনের সময় একটি বিজ্ঞপ্তি পোস্ট করে। ব্যবহারকারী যখন বিজ্ঞপ্তিতে ক্লিক করেন, তখন অ্যাপের মূল কার্যকলাপ প্রদর্শিত হয়:
কোটলিন
class GeofenceBroadcastReceiver : BroadcastReceiver() { // ... override fun onReceive(context: Context?, intent: Intent?) { val geofencingEvent = GeofencingEvent.fromIntent(intent) if (geofencingEvent.hasError()) { val errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.errorCode) Log.e(TAG, errorMessage) return } // Get the transition type. val geofenceTransition = geofencingEvent.geofenceTransition // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. val triggeringGeofences = geofencingEvent.triggeringGeofences // Get the transition details as a String. val geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ) // Send notification and log the transition details. sendNotification(geofenceTransitionDetails) Log.i(TAG, geofenceTransitionDetails) } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)) } } }
জাভা
public class GeofenceBroadcastReceiver extends BroadcastReceiver { // ... protected void onReceive(Context context, Intent intent) { GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); if (geofencingEvent.hasError()) { String errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.getErrorCode()); Log.e(TAG, errorMessage); return; } // Get the transition type. int geofenceTransition = geofencingEvent.getGeofenceTransition(); // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences(); // Get the transition details as a String. String geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ); // Send notification and log the transition details. sendNotification(geofenceTransitionDetails); Log.i(TAG, geofenceTransitionDetails); } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)); } } }
PendingIntent মাধ্যমে ট্রানজিশন ইভেন্ট সনাক্ত করার পর, BroadcastReceiver জিওফেন্স ট্রানজিশনের ধরণ পায় এবং পরীক্ষা করে যে এটি অ্যাপটি বিজ্ঞপ্তি ট্রিগার করার জন্য যে ইভেন্টগুলি ব্যবহার করে - এই ক্ষেত্রে GEOFENCE_TRANSITION_ENTER অথবা GEOFENCE_TRANSITION_EXIT - তার মধ্যে একটি কিনা। এরপর পরিষেবাটি একটি বিজ্ঞপ্তি পাঠায় এবং ট্রানজিশনের বিবরণ লগ করে।
জিওফেন্স পর্যবেক্ষণ বন্ধ করুন
যখন জিওফেন্স মনিটরিং আর প্রয়োজন হয় না বা পছন্দ হয় না, তখন তা বন্ধ করলে তা ডিভাইসের ব্যাটারি পাওয়ার এবং CPU চক্র সাশ্রয় করতে সাহায্য করতে পারে। জিওফেন্স যোগ এবং অপসারণের জন্য ব্যবহৃত প্রধান কার্যকলাপে আপনি জিওফেন্স মনিটরিং বন্ধ করতে পারেন; একটি জিওফেন্স অপসারণ করলে তা অবিলম্বে বন্ধ হয়ে যায়। API অনুরোধ আইডির মাধ্যমে অথবা প্রদত্ত PendingIntent সাথে সম্পর্কিত জিওফেন্সগুলি অপসারণের মাধ্যমে জিওফেন্সগুলি অপসারণের পদ্ধতি প্রদান করে।
নিম্নলিখিত স্নিপেটটি PendingIntent দ্বারা জিওফেন্সগুলি সরিয়ে দেয়, ডিভাইসটি পূর্বে যোগ করা জিওফেন্সগুলিতে প্রবেশ বা প্রস্থান করার সময় সমস্ত পরবর্তী বিজ্ঞপ্তি বন্ধ করে দেয়:
কোটলিন
geofencingClient?.removeGeofences(geofencePendingIntent)?.run { addOnSuccessListener { // Geofences removed // ... } addOnFailureListener { // Failed to remove geofences // ... } }
জাভা
geofencingClient.removeGeofences(getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences removed // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to remove geofences // ... } });
আপনি জিওফেন্সিংকে অন্যান্য অবস্থান-সচেতন বৈশিষ্ট্যের সাথে একত্রিত করতে পারেন, যেমন পর্যায়ক্রমিক অবস্থান আপডেট। আরও তথ্যের জন্য, এই ক্লাসের অন্যান্য পাঠগুলি দেখুন।
জিওফেন্সিংয়ের জন্য সেরা পদ্ধতি ব্যবহার করুন
এই বিভাগে অ্যান্ড্রয়েডের জন্য লোকেশন এপিআই-এর সাথে জিওফেন্সিং ব্যবহারের সুপারিশগুলি বর্ণনা করা হয়েছে।
বিদ্যুৎ খরচ কমানো
জিওফেন্সিং ব্যবহারকারী অ্যাপগুলিতে বিদ্যুৎ খরচ অপ্টিমাইজ করার জন্য আপনি নিম্নলিখিত কৌশলগুলি ব্যবহার করতে পারেন:
বিজ্ঞপ্তির প্রতিক্রিয়াশীলতাকে উচ্চতর মান নির্ধারণ করুন। এটি করলে জিওফেন্স সতর্কতার ল্যাটেন্সি বৃদ্ধি করে বিদ্যুৎ খরচ উন্নত হয়। উদাহরণস্বরূপ, যদি আপনি পাঁচ মিনিটের প্রতিক্রিয়াশীলতা মান নির্ধারণ করেন তবে আপনার অ্যাপ প্রতি পাঁচ মিনিটে একবার প্রবেশ বা প্রস্থান সতর্কতা পরীক্ষা করে। কম মান নির্ধারণের অর্থ এই নয় যে ব্যবহারকারীরা সেই সময়ের মধ্যে অবহিত হবেন (উদাহরণস্বরূপ, আপনি যদি 5 সেকেন্ডের মান নির্ধারণ করেন তবে সতর্কতা পেতে এর চেয়ে কিছুটা বেশি সময় লাগতে পারে)।
যেসব স্থানে ব্যবহারকারী উল্লেখযোগ্য পরিমাণ সময় ব্যয় করেন, যেমন বাড়ি বা কর্মক্ষেত্র, সেখানে বৃহত্তর জিওফেন্স ব্যাসার্ধ ব্যবহার করুন। যদিও বৃহত্তর ব্যাসার্ধ সরাসরি বিদ্যুৎ খরচ কমায় না, তবে এটি অ্যাপটি প্রবেশ বা প্রস্থানের জন্য যে ফ্রিকোয়েন্সিতে পরীক্ষা করে তা কমিয়ে দেয়, কার্যকরভাবে সামগ্রিক বিদ্যুৎ খরচ কমিয়ে দেয়।
আপনার জিওফেন্সের জন্য সর্বোত্তম ব্যাসার্ধটি বেছে নিন
সেরা ফলাফলের জন্য, জিওফেন্সের সর্বনিম্ন ব্যাসার্ধ ১০০ - ১৫০ মিটারের মধ্যে সেট করা উচিত। যখন ওয়াই-ফাই উপলব্ধ থাকে তখন অবস্থানের নির্ভুলতা সাধারণত ২০ - ৫০ মিটারের মধ্যে হয়। যখন ইনডোর লোকেশন উপলব্ধ থাকে, তখন নির্ভুলতার পরিসর ৫ মিটারের মতো ছোট হতে পারে। যদি না আপনি জানেন যে জিওফেন্সের ভিতরে ইনডোর লোকেশন উপলব্ধ, তাহলে ধরে নিন যে ওয়াই-ফাই লোকেশনের নির্ভুলতা প্রায় ৫০ মিটার।
যখন ওয়াই-ফাই লোকেশন পাওয়া যায় না (উদাহরণস্বরূপ, যখন আপনি গ্রামাঞ্চলে গাড়ি চালান), তখন লোকেশনের নির্ভুলতা হ্রাস পায়। নির্ভুলতার পরিসর কয়েকশ মিটার থেকে কয়েক কিলোমিটার পর্যন্ত হতে পারে। এই ধরণের ক্ষেত্রে, আপনার আরও বড় ব্যাসার্ধ ব্যবহার করে জিওফেন্স তৈরি করা উচিত।
আপনার অ্যাপ কেন জিওফেন্সিং ব্যবহার করে তা ব্যবহারকারীদের ব্যাখ্যা করুন।
যেহেতু আপনার অ্যাপটি জিওফেন্সিং ব্যবহার করার সময় ব্যাকগ্রাউন্ডে লোকেশন অ্যাক্সেস করে, তাই আপনার অ্যাপটি ব্যবহারকারীদের কীভাবে সুবিধা প্রদান করে তা বিবেচনা করুন। ব্যবহারকারীর বোধগম্যতা এবং স্বচ্ছতা বৃদ্ধির জন্য আপনার অ্যাপটির কেন এই অ্যাক্সেস প্রয়োজন তা স্পষ্টভাবে ব্যাখ্যা করুন।
জিওফেন্সিং সহ অবস্থান অ্যাক্সেস সম্পর্কিত সেরা অনুশীলন সম্পর্কে আরও তথ্যের জন্য, গোপনীয়তার সেরা অনুশীলন পৃষ্ঠাটি দেখুন।
স্প্যাম সতর্কতা কমাতে dwell transition টাইপ ব্যবহার করুন
যদি আপনি জিওফেন্সের পাশ দিয়ে অল্প সময়ের জন্য গাড়ি চালানোর সময় প্রচুর পরিমাণে অ্যালার্ট পান, তাহলে অ্যালার্ট কমানোর সর্বোত্তম উপায় হল GEOFENCE_TRANSITION_DWELL এর পরিবর্তে GEOFENCE_TRANSITION_ENTER ট্রানজিশন টাইপ ব্যবহার করা। এইভাবে, ব্যবহারকারী যখন নির্দিষ্ট সময়ের জন্য জিওফেন্সের ভিতরে থামেন তখনই কেবল বাস সতর্কতা পাঠানো হয়। আপনি একটি loitering delay সেট করে সময়কাল নির্বাচন করতে পারেন।
শুধুমাত্র প্রয়োজনে জিওফেন্স পুনরায় নিবন্ধন করুন
নিবন্ধিত জিওফেন্সগুলি com.google.process.location প্রক্রিয়ায় রাখা হয় যা com.google.android.gms প্যাকেজের মালিকানাধীন। নিম্নলিখিত ইভেন্টগুলি পরিচালনা করার জন্য অ্যাপটিকে কিছু করার প্রয়োজন নেই, কারণ এই ইভেন্টগুলির পরে সিস্টেম জিওফেন্সগুলি পুনরুদ্ধার করে:
- গুগল প্লে পরিষেবা আপগ্রেড করা হয়েছে।
- সিস্টেমের রিসোর্স সীমাবদ্ধতার কারণে গুগল প্লে পরিষেবা বন্ধ হয়ে যায় এবং পুনরায় চালু হয়।
- অবস্থান প্রক্রিয়াটি ক্র্যাশ করে।
নিম্নলিখিত ইভেন্টগুলির পরেও যদি জিওফেন্সগুলির প্রয়োজন হয় তবে অ্যাপটিকে অবশ্যই পুনরায় নিবন্ধন করতে হবে, কারণ নিম্নলিখিত ক্ষেত্রে সিস্টেম জিওফেন্সগুলি পুনরুদ্ধার করতে পারে না:
- ডিভাইসটি রিবুট করা হয়েছে। অ্যাপটি ডিভাইসের বুট সম্পূর্ণ হওয়ার ক্রিয়াটি শুনবে এবং তারপরে প্রয়োজনীয় জিওফেন্সগুলি পুনরায় নিবন্ধন করবে।
- অ্যাপটি আনইনস্টল করে পুনরায় ইনস্টল করা হয়েছে।
- অ্যাপের ডেটা সাফ করা হয়েছে।
- Google Play পরিষেবার ডেটা সাফ করা হয়েছে।
- অ্যাপটি একটি
GEOFENCE_NOT_AVAILABLEসতর্কতা পেয়েছে। এটি সাধারণত NLP (Android এর নেটওয়ার্ক অবস্থান সরবরাহকারী) অক্ষম করার পরে ঘটে।
জিওফেন্স প্রবেশ ইভেন্টের সমস্যা সমাধান করুন
যদি ডিভাইসটি জিওফেন্সে প্রবেশ করার সময় জিওফেন্সগুলি ট্রিগার না করা হয় ( GEOFENCE_TRANSITION_ENTER সতর্কতা ট্রিগার করা হয় না), তাহলে প্রথমে নিশ্চিত করুন যে আপনার জিওফেন্সগুলি এই নির্দেশিকায় বর্ণিত পদ্ধতিতে সঠিকভাবে নিবন্ধিত আছে।
সতর্কতাগুলি প্রত্যাশা অনুযায়ী কাজ না করার কিছু সম্ভাব্য কারণ এখানে দেওয়া হল:
- আপনার জিওফেন্সের ভেতরে সঠিক অবস্থান পাওয়া যাচ্ছে না অথবা আপনার জিওফেন্স খুব ছোট। বেশিরভাগ ডিভাইসে, জিওফেন্স পরিষেবা জিওফেন্স ট্রিগার করার জন্য শুধুমাত্র নেটওয়ার্ক অবস্থান ব্যবহার করে। পরিষেবাটি এই পদ্ধতিটি ব্যবহার করে কারণ নেটওয়ার্ক অবস্থান অনেক কম বিদ্যুৎ খরচ করে, পৃথক অবস্থান পেতে কম সময় লাগে এবং সবচেয়ে গুরুত্বপূর্ণ বিষয় হল এটি বাড়ির ভিতরে উপলব্ধ।
ডিভাইসে ওয়াই-ফাই বন্ধ আছে। ওয়াই-ফাই চালু থাকলে লোকেশনের নির্ভুলতা উল্লেখযোগ্যভাবে উন্নত হতে পারে, তাই যদি ওয়াই-ফাই বন্ধ থাকে, তাহলে জিওফেন্সের ব্যাসার্ধ, ডিভাইস মডেল বা অ্যান্ড্রয়েড সংস্করণ সহ বিভিন্ন সেটিংসের উপর নির্ভর করে আপনার অ্যাপ্লিকেশনটি কখনও জিওফেন্স সতর্কতা নাও পেতে পারে। অ্যান্ড্রয়েড 4.3 (API লেভেল 18) থেকে শুরু করে, আমরা "ওয়াই-ফাই স্ক্যান অনলি মোড" এর ক্ষমতা যুক্ত করেছি যা ব্যবহারকারীদের ওয়াই-ফাই অক্ষম করতে দেয় কিন্তু তবুও ভাল নেটওয়ার্ক অবস্থান পেতে দেয়। ব্যবহারকারীকে অনুরোধ করা এবং ওয়াই-ফাই বা ওয়াই-ফাই স্ক্যান অনলি মোড উভয়ই অক্ষম থাকলে সক্ষম করার জন্য ব্যবহারকারীকে একটি শর্টকাট প্রদান করা ভাল অভ্যাস। সর্বোত্তম অবস্থান সনাক্তকরণের জন্য ডিভাইসের সিস্টেম সেটিংস সঠিকভাবে কনফিগার করা আছে কিনা তা নিশ্চিত করতে SettingsClient ব্যবহার করুন।
দ্রষ্টব্য: যদি আপনার অ্যাপটি Android 10 (API লেভেল 29) বা তার উচ্চতর ভার্সনের জন্য তৈরি হয়, তাহলে আপনি
WifiManager.setEnabled()সরাসরি কল করতে পারবেন না যদি না আপনার অ্যাপটি একটি সিস্টেম অ্যাপ বা ডিভাইস পলিসি কন্ট্রোলার (DPC) হয়। পরিবর্তে, একটি সেটিংস প্যানেল ব্যবহার করুন।- আপনার জিওফেন্সের ভেতরে কোনও নির্ভরযোগ্য নেটওয়ার্ক সংযোগ নেই। যদি কোনও নির্ভরযোগ্য ডেটা সংযোগ না থাকে, তাহলে সতর্কতা তৈরি নাও হতে পারে। এর কারণ হল জিওফেন্স পরিষেবা নেটওয়ার্ক অবস্থান প্রদানকারীর উপর নির্ভর করে যার জন্য একটি ডেটা সংযোগের প্রয়োজন হয়।
- সতর্কতা দেরিতে আসতে পারে। জিওফেন্স পরিষেবা ক্রমাগত অবস্থানের জন্য অনুসন্ধান করে না, তাই সতর্কতা গ্রহণের সময় কিছু লেটেন্সি আশা করা যায়। সাধারণত লেটেন্সি ২ মিনিটেরও কম হয়, ডিভাইসটি যখন চলমান থাকে তখনও কম। যদি ব্যাকগ্রাউন্ড লোকেশন লিমিট কার্যকর থাকে, তাহলে লেটেন্সি গড়ে প্রায় ২-৩ মিনিট হয়। যদি ডিভাইসটি উল্লেখযোগ্য সময়ের জন্য স্থির থাকে, তাহলে লেটেন্সি বাড়তে পারে (৬ মিনিট পর্যন্ত)।
অতিরিক্ত সম্পদ
জিওফেন্সিং সম্পর্কে আরও জানতে, নিম্নলিখিত উপকরণগুলি দেখুন:
নমুনা
জিওফেন্স তৈরি এবং পর্যবেক্ষণের জন্য নমুনা অ্যাপ ।