একটিভিটি রিকগনিশন আপডেট বন্ধ করতে, রিকোয়েস্ট আপডেটে ব্যবহার করার জন্য আপনি যে প্যাটার্ন ব্যবহার করেছিলেন সেরকমই প্যাটার্ন ব্যবহার করুন, কিন্তু requestActivityUpdates()এর পরিবর্তে removeActivityUpdates() কল করুন।
যেহেতু আপডেট রিম্যুভ করা কিছু পদ্ধতি ব্যবহার করে যা আপনি আপডেট এ্যাড করার কাজে ব্যবহার করতেন, দুইটা অপারেশনের জন্য রিকোয়েস্ট টাইপ নির্ধারণ করার মাধ্যমে শুরু করুন:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
public enum REQUEST_TYPE {START, STOP}
private REQUEST_TYPE mRequestType;
...
}
কোড পরিবর্তন করুন যা একটিভিটি রিকগনিশন শুরু করে যাতে এটা START রিকোয়েস্ট টাইপ ব্যবহার করতে পারে:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
public void startUpdates() {
// Set the request type to START
mRequestType = REQUEST_TYPE.START;
/*
* Test for Google Play services after setting the request type.
* If Google Play services isn't present, the proper request type
* can be restarted.
*/
if (!servicesConnected()) {
return;
}
...
}
...
public void onConnected(Bundle dataBundle) {
switch (mRequestType) {
case START :
/*
* Request activity recognition updates using the
* preset detection interval and PendingIntent.
* This call is synchronous.
*/
mActivityRecognitionClient.requestActivityUpdates(
DETECTION_INTERVAL_MILLISECONDS,
mActivityRecognitionPendingIntent);
break;
...
/*
* An enum was added to the definition of REQUEST_TYPE,
* but it doesn't match a known case. Throw an exception.
*/
default :
throw new Exception("Unknown request type in onConnected().");
break;
}
...
}
...
}
একটি পদ্ধতি নির্ধারণ করুন যা একটিভিটি রিকগনিশন আপডেটে একটি স্টপ রিকোয়েস্ট করে। এই পদ্ধতিতে, রিকোয়েস্ট টাইপ সেট করুন এবং লোকেশন সার্ভিসে একটি কানেকশন (সংযোগ) রিকোয়েস্ট করুন। আপনি আপনার যে কোন একটিভিটি থেকে এই পদ্ধতি কল করতে পারেন; এটার উদ্দেশ্য হচ্ছে মেথড কল চেইন শুরু করা যা একটিভিটি আপডেট বন্ধ (স্টপ) করে:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
/**
* Turn off activity recognition updates
*
*/
public void stopUpdates() {
// Set the request type to STOP
mRequestType = REQUEST_TYPE.STOP;
/*
* 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;
}
// If a request is not already underway
if (!mInProgress) {
// Indicate that a request is in progress
mInProgress = true;
// Request a connection to Location Services
mActivityRecognitionClient.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.
*/
}
...
}
...
}
onConnected()এ যদি রিকোয়েস্ট টাইপ STOP হয়, removeActivityUpdates()কল করুন। removeActivityUpdates()এ PendingIntent পাস করুন যা আপনি প্যারামিটার হিসাবে আপডেট শুরু কাজে ব্যবহার করেছিলেন:
public class MainActivity extends FragmentActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
public void onConnected(Bundle dataBundle) {
switch (mRequestType) {
...
case STOP :
mActivityRecognitionClient.removeActivityUpdates(
mActivityRecognitionPendingIntent);
break;
...
}
...
}
...
}
আপনাকে onDisconnected()বা onConnectionFailed()এর বাস্তবায়ন পরিবর্তন করার কোন প্রয়োজন নেই, কারন এই পদ্ধতিগুলো রিকোয়েস্ট টাইপের উপর নির্ভরশীল নয়:
আপনার এখন একটি অ্যাপের একটি মৌলিক কাঠামো আছে যা একটিভিটি রিকগনিশন বাস্তবায়ন করে। আপনি অন্য লোকেশন অ্যাওয়ার বৈশিষ্টের সাথে অ্যাপের একটিভিটি রিকগনিশন একত্রিত করতে পারেন, যেমন পর্যায়ক্রমিক লোকেশন আপডেট বা geofencing, যা এই ক্লাসের অন্য অনুশীলনীতে আলোচনা করা হয়েছে।