একটি একক জিওফেন্স অপসারন বা জিওফেন্স সেট করার প্রক্রিয়া সকল জিওফেন্স অপসারন করার প্রক্রিয়ার মতো একই। আপনি যে জিওফেন্স অপসারন করতে চান তা নির্দিষ্ট করতে, স্ট্রিং অবজেক্টের একটি List এ তাদের জিওফেন্স আইডি ভ্যালু যোগ করুন। যথাযথ সিগনেচার (স্বাক্ষর) সহ removeGeofences এর একটি ভিন্ন সংজ্ঞা তে এই List পাস করে দিন। এই পদ্ধতি তারপর অপসারন প্রক্রিয়া শুরু করে।
একটি লিস্ট দ্বারা জিওফেন্স অফসারণ করার জন্য একটি রিকোয়েস্ট টাইপ যোগ করার মাধ্যমে শুরু করা, এবং জিওফেন্সের লিস্ট জমিয়ে রাখার জন্য একটি বৈশ্বিক ভেরিয়েবলও যোগ করুন:
...
// Enum type for controlling the type of removal requested
public enum REQUEST_TYPE = {ADD, REMOVE_INTENT, REMOVE_LIST}
// Store the list of geofence Ids to remove
String<List> mGeofencesToRemove;
পরবর্তীতে, যে জিওফেন্সের লিস্ট আপনি অপসারন করতে চান তা নির্ধারণ করুন। উদাহরণস্বরূপ, এই চিত্র জিওফেন্স আইডি “1” দ্বারা নির্ধারিত Geofence অপসারণ করে:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks,
OnConnectionFailedListener,
OnAddGeofencesResultListener {
...
List<String> listOfGeofences =
Collections.singletonList("1");
removeGeofences(listOfGeofences);
...
}
নিচের চিত্রটি removeGeofences()পদ্ধতি নির্ধারণ করে:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks,
OnConnectionFailedListener,
OnAddGeofencesResultListener {
...
/**
* Start a request to remove monitoring by
* calling LocationClient.connect()
*
*/
public void removeGeofences(List<String> geofenceIds) {
// If Google Play services is unavailable, exit
// Record the type of removal request
mRequestType = REMOVE_LIST;
/*
* Test for Google Play services after setting the request type.
* If Google Play services isn't present, the request can be
* restarted.
*/
if (!servicesConnected()) {
return;
}
// Store the list of geofences to remove
mGeofencesToRemove = geofenceIds;
/*
* Create a new location client object. Since the current
* activity class implements ConnectionCallbacks and
* OnConnectionFailedListener, pass the current activity object
* as the listener for both parameters
*/
mLocationClient = new LocationClient(this, this, this);
// If a request is not already underway
if (!mInProgress) {
// Indicate that a request is underway
mInProgress = true;
// Request a connection from the client to Location Services
mLocationClient.connect();
} else {
/*
* A request is already underway. You can handle
* this situation by disconnecting the client,
* re-setting the flag, and then re-trying the
* request.
*/
}
}
...
}
যখন লোকেশন সার্ভিস কলব্যাক পদ্ধতি আহবান করে সেটা নির্দেশ করে যে কানেকশন (সংযোগ) ওপেন করা আছে, জিওফেন্সের লিস্ট অপসারণ করতে রিকোয়েস্ট করুন। রিকোয়েস্ট করার পর ক্লায়েন্টকে বিচ্ছিন্ন করুন।
উদাহরণ:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks,
OnConnectionFailedListener,
OnAddGeofencesResultListener {
...
private void onConnected(Bundle dataBundle) {
...
switch (mRequestType) {
...
// If removeGeofencesById was called
case REMOVE_LIST :
mLocationClient.removeGeofences(
mGeofencesToRemove, this);
break;
...
}
...
}
...
}
onRemoveGeofencesByRequestIdsResult()এর একটি বাস্তবায়ন নির্ধারণ করুন। লোকেশন সার্ভিস এই কলব্যাক পদ্ধতি আহবান করে সেটা নির্দেশ করতে যে জিওফেন্সের লিস্ট অপসারণ করা রিকোয়েস্ট সম্পন্ন হয়েছে। এই পদ্ধতিতে ইনকামিং স্ট্যাটাস কোড পরীক্ষা করে এবং যথাযথ একশন নেয়:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks,
OnConnectionFailedListener,
OnAddGeofencesResultListener {
...
/**
* When the request to remove geofences by IDs returns, handle the
* result.
*
* @param statusCode The code returned by Location Services
* @param geofenceRequestIds The IDs removed
*/
@Override
public void onRemoveGeofencesByRequestIdsResult(
int statusCode, String[] geofenceRequestIds) {
// If removing the geocodes was successful
if (LocationStatusCodes.SUCCESS == statusCode) {
/*
* Handle successful removal of geofences here.
* You can send out a broadcast intent or update the UI.
* geofences into the Intent's extended data.
*/
} else {
// If removing the geofences failed
/*
* Report errors here.
* You can log the error using Log.e() or update
* the UI.
*/
}
// Indicate that a request is no longer in progress
mInProgress = false;
// Disconnect the location client
mLocationClient.disconnect();
}
...
}
আপনি অন্য লোকেশন অ্যাওয়ার (সচেতন) বৈশিষ্টর সাথে জিওফেন্সিং একিভুত করতে পারেন, যেমন পর্যায়ক্রমিক লোকেশন আপডেট বা একটিভিটি রিকগনিশন (সনাক্তকরণ) যা এই ক্লাসের অন্য অনুশীলনীতে আলোচনা করা হয়েছে।
পরবর্তী অনুশীলনী, ইউজারের কার্যক্রম চিহ্নিত করা (Recognizing the User's Current Activity) আপনাকে দেখাবে কীভাবে একটিভিটি আপডেট রিকোয়েস্ট করতে হয় এবং গ্রহণ করতে হয়। নিয়মিত বিরতিতে লোকেশন সার্ভিস আপনাকে ইউজারের বর্তমান শারীরিক একটিভিটি সম্পর্কে তথ্য পাঠাতে পারে। এই তথ্যের উপর ভিত্তি করে আপনি আপনার অ্যাপের আচরণ পরিবর্তন করতে পারেন; উদাহরণস্বরূপ, আপনি দীর্ঘ বিরতীর আপডেটে চলে আসতে পারেন যদি ইউচার গাড়ী না চালিয়ে হাটতে থাকেন।