গুগল প্লে সার্ভিসেস লোকেশন এপিআই ব্যবহার করে, আপনার অ্যাপ ব্যবহারকারীর ডিভাইসের সর্বশেষ জানা অবস্থান জানতে চাইতে পারে। বেশিরভাগ ক্ষেত্রে, আপনি ব্যবহারকারীর বর্তমান অবস্থান জানতে আগ্রহী হন, যা সাধারণত ডিভাইসটির সর্বশেষ জানা অবস্থানের সমান হয়ে থাকে।
বিশেষত, ডিভাইসটির সর্বশেষ জানা অবস্থান পুনরুদ্ধার করতে ফিউজড লোকেশন প্রোভাইডার ব্যবহার করুন। ফিউজড লোকেশন প্রোভাইডার হলো গুগল প্লে সার্ভিসের লোকেশন এপিআইগুলোর মধ্যে একটি। এটি অন্তর্নিহিত লোকেশন প্রযুক্তি পরিচালনা করে এবং একটি সহজ এপিআই প্রদান করে, যার মাধ্যমে আপনি উচ্চ নির্ভুলতা বা কম শক্তির মতো প্রয়োজনীয়তাগুলো উচ্চ স্তরে নির্দিষ্ট করতে পারেন। এটি ডিভাইসের ব্যাটারি শক্তির ব্যবহারকেও অপ্টিমাইজ করে।
দ্রষ্টব্য: যখন আপনার অ্যাপটি ব্যাকগ্রাউন্ডে চলে, তখন লোকেশন অ্যাক্সেস শুধুমাত্র অ্যাপটির মূল কার্যকারিতার জন্য অপরিহার্য হওয়া উচিত এবং ব্যবহারকারীদের কাছে এর যথাযথ প্রকাশ নিশ্চিত করতে হবে।
এই পাঠে দেখানো হয়েছে কিভাবে ফিউজড লোকেশন প্রোভাইডারে getLastLocation() মেথড ব্যবহার করে কোনো ডিভাইসের অবস্থানের জন্য একটিমাত্র অনুরোধ করতে হয়।
গুগল প্লে পরিষেবা সেট আপ করুন
ফিউজড লোকেশন প্রোভাইডার অ্যাক্সেস করার জন্য, আপনার অ্যাপের ডেভেলপমেন্ট প্রজেক্টে অবশ্যই গুগল প্লে সার্ভিসেস অন্তর্ভুক্ত থাকতে হবে। এসডিকে ম্যানেজারের মাধ্যমে গুগল প্লে সার্ভিসেস কম্পোনেন্টটি ডাউনলোড ও ইনস্টল করুন এবং লাইব্রেরিটি আপনার প্রজেক্টে যুক্ত করুন। বিস্তারিত জানতে, গুগল প্লে সার্ভিসেস সেট আপ করার নির্দেশিকাটি দেখুন।
অ্যাপের অনুমতি নির্দিষ্ট করুন
যেসব অ্যাপের ফিচার লোকেশন সার্ভিস ব্যবহার করে, সেগুলোকে সেই ফিচারগুলোর ব্যবহারের ধরনের ওপর নির্ভর করে লোকেশন পারমিশনের জন্য অনুরোধ করতে হবে।
অবস্থান পরিষেবা ক্লায়েন্ট তৈরি করুন
আপনার অ্যাক্টিভিটির onCreate() মেথডে, নিচের কোড স্নিপেটে দেখানো অনুযায়ী Fused Location Provider Client-এর একটি ইনস্ট্যান্স তৈরি করুন।
কোটলিন
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
জাভা
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
সর্বশেষ জানা অবস্থান পান
একবার আপনি লোকেশন সার্ভিসেস ক্লায়েন্ট তৈরি করে নিলে, আপনি একজন ব্যবহারকারীর ডিভাইসের সর্বশেষ জানা অবস্থান পেতে পারেন। যখন আপনার অ্যাপ এগুলোর সাথে সংযুক্ত থাকে, তখন আপনি ডিভাইসের অবস্থান পুনরুদ্ধার করতে ফিউজড লোকেশন প্রোভাইডারের getLastLocation() মেথডটি ব্যবহার করতে পারেন। এই কলের মাধ্যমে প্রাপ্ত অবস্থানের নির্ভুলতা আপনার অ্যাপ ম্যানিফেস্টে দেওয়া পারমিশন সেটিং দ্বারা নির্ধারিত হয়, যেমনটি লোকেশন পারমিশন অনুরোধ করার নির্দেশিকায় বর্ণনা করা হয়েছে।
সর্বশেষ জ্ঞাত অবস্থান জানতে, getLastLocation() মেথডটি কল করুন। নিম্নলিখিত কোড স্নিপেটটি এই অনুরোধ এবং এর প্রতিক্রিয়ার একটি সহজ পরিচালনা পদ্ধতি প্রদর্শন করে:
কোটলিন
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
জাভা
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
getLastLocation() মেথডটি একটি Task রিটার্ন করে, যা ব্যবহার করে আপনি কোনো ভৌগোলিক অবস্থানের অক্ষাংশ ও দ্রাঘিমাংশ স্থানাঙ্কসহ একটি Location অবজেক্ট পেতে পারেন। নিম্নলিখিত পরিস্থিতিতে Location অবজেক্টটি null হতে পারে:
- ডিভাইস সেটিংসে লোকেশন বন্ধ করা আছে। সর্বশেষ লোকেশন আগে নেওয়া হয়ে থাকলেও ফলাফল
nullহতে পারে, কারণ লোকেশন নিষ্ক্রিয় করলে ক্যাশও মুছে যায়। - ডিভাইসটি তার অবস্থান রেকর্ড করেনি, যা একটি নতুন ডিভাইস বা ফ্যাক্টরি সেটিংসে রিস্টোর করা ডিভাইসের ক্ষেত্রে হতে পারে।
- ডিভাইসের গুগল প্লে সার্ভিস পুনরায় চালু হয়েছে, এবং সার্ভিসটি পুনরায় চালু হওয়ার পর লোকেশনের জন্য অনুরোধ করেছে এমন কোনো সক্রিয় ফিউজড লোকেশন প্রোভাইডার ক্লায়েন্ট নেই। এই পরিস্থিতি এড়াতে, আপনি একটি নতুন ক্লায়েন্ট তৈরি করে নিজেই লোকেশন আপডেটের জন্য অনুরোধ করতে পারেন। আরও তথ্যের জন্য, ‘লোকেশন আপডেটের জন্য অনুরোধ’ দেখুন।
সেরা অবস্থানের অনুমান বেছে নিন
FusedLocationProviderClient ডিভাইসের অবস্থানের তথ্য পুনরুদ্ধার করার জন্য বেশ কয়েকটি পদ্ধতি প্রদান করে। আপনার অ্যাপের ব্যবহারের ধরনের ওপর নির্ভর করে নিম্নলিখিতগুলির মধ্যে থেকে একটি বেছে নিন:
-
getLastLocation()আরও দ্রুত একটি আনুমানিক অবস্থান খুঁজে বের করে এবং আপনার অ্যাপের কারণে ব্যাটারির ব্যবহার কমিয়ে আনে। তবে, যদি সম্প্রতি অন্য কোনো ক্লায়েন্ট সক্রিয়ভাবে অবস্থান ব্যবহার না করে থাকে, তাহলে অবস্থানের তথ্যটি পুরোনো হয়ে যেতে পারে। getCurrentLocation()আরও ধারাবাহিকভাবে একটি নতুন ও নির্ভুল অবস্থান প্রদান করে। তবে, এই পদ্ধতিটি ডিভাইসে সক্রিয় অবস্থান গণনা শুরু করতে পারে।যখনই সম্ভব, একটি নতুন অবস্থান পাওয়ার জন্য এটিই প্রস্তাবিত উপায়, এবং
requestLocationUpdates()ব্যবহার করে নিজে থেকে অবস্থান আপডেট শুরু ও পরিচালনা করার মতো বিকল্পগুলোর চেয়ে এটি বেশি নিরাপদ। যদি আপনার অ্যাপrequestLocationUpdates()কল করে, তাহলে অবস্থান উপলব্ধ না থাকলে, অথবা নতুন অবস্থান পাওয়ার পর অনুরোধটি সঠিকভাবে বন্ধ না করা হলে, আপনার অ্যাপ মাঝে মাঝে প্রচুর পরিমাণে শক্তি খরচ করতে পারে।
অতিরিক্ত সম্পদ
অ্যান্ড্রয়েডে বর্তমান অবস্থান জানার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত উপকরণগুলি দেখুন:
নমুনা
- বর্তমান অবস্থান নেওয়ার সময় সর্বোত্তম অনুশীলন প্রদর্শনের জন্য একটি নমুনা অ্যাপ ।