লোকেশন সার্ভিস গুগল প্লে সার্ভিস APK’র একটি অংশ। যেহেতু ইউজারের ডিভাইসের অবস্থা প্রত্যাশা অনুযায়ী হওয়া কঠিন, আপনার সবসময় চেক করা উচিত যে লোকেশন সার্ভিসের সাথে সংযুক্ত হওয়ার চেষ্টা করার পূর্বে APK ইনস্টল হয়েছে। APK ইনস্টল হয়েছে কিনা তা পরীক্ষা করতে GooglePlayServicesUtil.isGooglePlayServicesAvailable() কল করুন যা রেফারেন্স ডকুমেন্টেশনের মধ্যে লিস্ট করা ইন্টিজার রেজাল্ট কোডের একটি ফেরত দেয়। আপনি যদি একটি এররের সম্মুখিন হোন, স্থানীয় ডায়লগ ফিরে পেতে GooglePlayServicesUtil.getErrorDialog() কল করুন, যে ডায়লগ ইউজারকে সঠিক কার্যক্রম গ্রহণ করতে অনুপ্রাণিত করে, তারপর একটি DialogFragment এর মধ্যে ডায়লগটি প্রদর্র্শণ করে। ডায়লগটি ইউজারকে সমস্যাটি সঠিক করতে দিতে পারে, যেই ক্ষেত্রে গুগল প্লে সার্ভিস আপনার একটিভিটিতে একটি রেজাল্ট ব্যাক পাঠাতে পারে। এই রেজাল্ট পরিচালনা করতে পদ্ধতি onActivityResult() ওভাররাইড করুন।
নোট: আপনার অ্যাপকে প্লাটফর্ম সংস্করণ ১.৬ এবং তৎপরবর্তী সংস্করনের সাথে সামঞ্জস্যপূর্ন করতে, একটিভিটি যা DialogFragment প্রদর্শন করে তাকে Activity এর পরিবর্তে অবশ্যই FragmentActivity কে সাবক্লাস করতে হবে। FragmentActivity ব্যবহার করা আপনাকে DialogFragment প্রদর্শন করতে getSupportFragmentManager() কল করতে দেয়।
যেহেতু আপনার কোডে একাধিক স্থানে সাধাারণত গুগল প্লে সার্ভিসের জন্য আপনাকে চেক করতে হয়, একটি পদ্ধতি নির্ধারণ করুন যা চেক কে আবদ্ধ করে, তারপর প্রতিটা কানেকশন প্রচেষ্টার পুর্বে পদ্ধতিটি কল করুন। নিচের কোড চিত্রটি গুগল প্লে সার্ভিস চেক করার জন্য প্রয়োজনীয় সকল কোড ধারণ:
public class MainActivity extends FragmentActivity {
...
// Global constants
/*
* Define a request code to send to Google Play services
* This code is returned in Activity.onActivityResult
*/
private final static int
CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
...
// Define a DialogFragment that displays the error dialog
public static class ErrorDialogFragment extends DialogFragment {
// Global field to contain the error dialog
private Dialog mDialog;
...
// Default constructor. Sets the dialog field to null
public ErrorDialogFragment() {
super();
mDialog = null;
}
...
// Set the dialog to display
public void setDialog(Dialog dialog) {
mDialog = dialog;
}
...
// Return a Dialog to the DialogFragment.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return mDialog;
}
...
}
...
/*
* Handle results returned to the FragmentActivity
* by Google Play services
*/
@Override
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
// Decide what to do based on the original request code
switch (requestCode) {
...
case CONNECTION_FAILURE_RESOLUTION_REQUEST :
/*
* If the result code is Activity.RESULT_OK, try
* to connect again
*/
switch (resultCode) {
...
case Activity.RESULT_OK :
/*
* Try the request again
*/
...
break;
}
...
}
...
}
...
private boolean servicesConnected() {
// Check that Google Play services is available
int resultCode =
GooglePlayServicesUtil.
isGooglePlayServicesAvailable(this);
// If Google Play services is available
if (ConnectionResult.SUCCESS == resultCode) {
// In debug mode, log the status
Log.d("Geofence Detection",
"Google Play services is available.");
// Continue
return true;
// Google Play services was not available for some reason
} else {
// Get the error code
int errorCode = connectionResult.getErrorCode();
// Get the error dialog from Google Play services
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
errorCode,
this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);
// If Google Play services can provide an error dialog
if (errorDialog != null) {
// Create a new DialogFragment for the error dialog
ErrorDialogFragment errorFragment =
new ErrorDialogFragment();
// Set the dialog in the DialogFragment
errorFragment.setDialog(errorDialog);
// Show the error dialog in the DialogFragment
errorFragment.show(
getSupportFragmentManager(),
"Geofence Detection");
}
}
}
...
}
নিচের অধ্যায়ের কোড চিত্র এই পদ্ধতিকে এটা নিশ্চিত করতে কল করে যে গুগল প্লে সার্ভিস রয়েছে।
জিওফেন্সিং ব্যবহার করতে, আপনি যে জিওফেন্স ব্যবহার করতে চান তা নির্ধারণ করার মাধ্যমে শুরু করুন। যদিও আপনি সাধারণভাবে একটি লোকাল ডাটাবেজে জিওফেন্স ডাটা স্টোর করেন এবং নেটওয়ার্ক থেকে এটা ডাউনলোড করে থাকেন, আপনার Geofence এর ইনসট্যান্স হিসাবে লোকেশন সার্ভিসে একটি জিওফেন্স পাঠানোর প্রয়োজন, যা আপনি Geofence.Builder দিয়ে তৈরী করেছন। প্রতিটা Geofence অবজেক্ট নিচের তথ্যগুলো ধারণ করে:
অক্ষাংশ, দ্রাঘিমাংশ এবং রেডিয়াস
জিওফেন্সের জন্য একটি চক্রাকার এলাকা নির্ধারণ করুন। একটি লোকেশন অব ইন্টারেস্ট চিহ্নিত করতে অক্ষাংশ এবং দ্রাঘিমাংশ ব্যবহার করুন এবং তারপর জিওফেন্স চিহ্নিত হওয়ার পূর্বে ইউজারকে লোকেশনের কতটা কাছাকাছি আসার প্রয়োজন তা সমন্বয় করতে রেডিয়াস ব্যবহার করুন। বড় রেডিয়াস, সম্ভাবনা আছে যে ইউজার একটি জিওফেন্সিং ট্রানজিশন (স্থানান্তর/ পরিবর্তন) এলার্ট সক্রিয় করে জিওফেন্সের সমীপবর্তী হওয়ার মাধ্যমে। উাদহরণস্বরূপ, একটি জিওফেন্সিং অ্যাপের জন্য একটি রেডিয়াস প্রদান করা যা ইউজারের বাড়ীর মধ্যে লাইট জ্বালায় যেহেতু ইউজার বাড়ি ফিরে এসেছে, এটা লাইটকে চালু রাখে এমনকি যদি ইউজার শুধুমাত্র পাশ দিয়ে যায়।
মেয়াদকালীন সময় (Expiration time)
কতক্ষণ জিওফেন্স সক্রিয় থাকা উচিত। যখনই মেয়াদোত্তির্ণ সময়ে পৌছুবে, লোকেশন সার্ভিস জিওফেন্স ডিলিট করে দিবে। অধিকাংশ সময়, আপনার উচিত মেয়াদ কাল নির্দিষ্ট করে দেয়া, কিন্তু আপনি ইউজারের বাড়ী বা কর্মস্থলের জন্য স্থায়ী জিওফেন্স রাখতে চাইতে পারেন ।
পরিবর্তন ধরণ (Transition type)
লোকেশন সার্ভিস সানক্ত করতে পারে যখন ইউজার জিওফেন্সের রেডিয়াসের মধ্যে থেকে এগিয়ে যায় ("বহঃৎু") এবং যখন ইউজার জিওফেন্সের রেডিয়াসের বাইরে পদক্ষেপ নেয় ("বীরঃ") বা উভয়ই নেয়।
জিওফেন্সের আইডি (Geofence ID)
একটি স্ট্রিং যা জিওফেন্সের সাথে স্টোর হয়। আপনার এটাকে অদ্বিতীয় (ইউনিক) ভাবে তৈরী করা উচিত, যাতে আপনি এটাকে লোকেশন সার্ভিস ট্র্যাকিং থেকে একটি জিওফেন্সকে অপসারণ করতে পারেন।