Intent যা লোকেশন সার্ভিস প্রতিটা আপডেট ইন্টারভ্যালের জন্য পঠায় তা বাস্তবায়ন করতে, IntentService এবং এর চাওয়া পদ্ধতিড়হ onHandleIntent() নির্ধারণ করুন। লোকেশন সার্ভিস Intent অবজেক্ট হিসাবে একটিভিটি রিকগনিশন আপডেট পাঠায়, আপনি যখন requestActivityUpdates() কল করেছিলেন তখন যে PendingIntent প্রদান করেছিলেন তা ব্যবহার করে। যেহেতু আপনি PendingIntent এর জন্য একটি স্পষ্ট (এক্সপ্লিসিট) ইনটেন্ট প্রদান করেছিলেন, একমাত্র কম্পোনেন্ট (উপাদান) যা ইনটেন্ট গ্রহন করে তা হচ্ছে IntentService যা যা আপনি নির্ধারণ করছেন।
নিচের চিত্রটি দেখায় কীভাবে একটি একটিভিটি রিকগনিশন আপডেটের মধ্যে ডাটা পরীক্ষ করা যায়।
ক্লাস এবং প্রয়োজনীয় পদ্ধতি onHandleIntent() নির্ধারণ করার মাধ্যমে শুরু করুন:
/**
* Service that receives ActivityRecognition updates. It receives
* updates in the background, even if the main Activity is not visible.
*/
public class ActivityRecognitionIntentService extends IntentService {
...
/**
* Called when a new activity detection update is available.
*/
@Override
protected void onHandleIntent(Intent intent) {
...
}
...
}
পরবর্তীতে, ইনটেন্টে ডাটা পরীক্ষা করুন, আপনি সম্ভাব্য একটিভিটির একটি তালিকা এবং প্রতিটার সম্ভাবনার তালিকা পেতে পারেন। নিচের চিত্রটি দেখায় কীভাবে সবচেয়ে সম্ভাব্য একটিভিটি, একটিভিটির জন্য কনফিডেন্স লেভেল (সম্ভাবনা যা এটা হচ্ছে সত্যিকার একটিভিটি) এবং এর টাইপ পাওয়া যায়।
public class ActivityRecognitionIntentService extends IntentService {
...
@Override
protected void onHandleIntent(Intent intent) {
...
// If the incoming intent contains an update
if (ActivityRecognitionResult.hasResult(intent)) {
// Get the update
ActivityRecognitionResult result =
ActivityRecognitionResult.extractResult(intent);
// Get the most probable activity
DetectedActivity mostProbableActivity =
result.getMostProbableActivity();
/*
* Get the probability that this activity is the
* the user's actual activity
*/
int confidence = mostProbableActivity.getConfidence();
/*
* Get an integer describing the type of activity
*/
int activityType = mostProbableActivity.getType();
String activityName = getNameFromType(activityType);
/*
* At this point, you have retrieved all the information
* for the current update. You can display this
* information to the user in a notification, or
* send it to an Activity or Service in a broadcast
* Intent.
*/
...
} else {
/*
* This implementation ignores intents that don't contain
* an activity update. If you wish, you can report them as
* errors.
*/
}
...
}
...
}
পদ্ধতি মবঃঘধসবঋৎড়সঞুঢ়ব()টি ডিসক্রিপটিভ স্ট্রিং এর মধ্যে একটিভিটি টাইপ রূপান্তর করে। একটি প্রোডাকশন অ্যাপ, আপনি ফিক্সড (নির্দিষ্ট) ভ্যালু ব্যবহার করার পরিবর্তে আপনার উচিত রিসোর্স থেকে স্ট্রিং রিট্রআইভ করা (পূণুরূদ্ধার করা):
public class ActivityRecognitionIntentService extends IntentService {
...
/**
* Map detected activity types to strings
*@param activityType The detected activity type
*@return A user-readable name for the type
*/
private String getNameFromType(int activityType) {
switch(activityType) {
case DetectedActivity.IN_VEHICLE:
return "in_vehicle";
case DetectedActivity.ON_BICYCLE:
return "on_bicycle";
case DetectedActivity.ON_FOOT:
return "on_foot";
case DetectedActivity.STILL:
return "still";
case DetectedActivity.UNKNOWN:
return "unknown";
case DetectedActivity.TILTING:
return "tilting";
}
return "unknown";
}
...
}
সিস্টেমে IntentService চিহ্নিত করতে, অ্যাপ মেনিফেস্টে একটি < service>এলিমেন্ট যোগ করুন। উদাহরণ:
<service
android:name="com.example.android.location.ActivityRecognitionIntentService"
android:label="@string/app_name"
android:exported="false">
</service>
উল্লেখ্য যে সার্ভিসের জন্য আপনাকে ইনটেন্ট ফিল্টার নির্দিষ্ট করার প্রয়োজন নেই কারন, এটা শুধুমাত্র এক্সপ্লিসিট ইনটেন্ট ব্যবহার করে থাকে। কীভাবে ইনকামিং একটিভিটি আপডেট ইনটেন্ট তৈরী করা হয় তা একটিভিটি বা ফ্র্যাগমেন্ট নির্ধারণ অধ্যায়ে আলোচনা করা হয়েছে