১. শুরু করার আগে
অ্যান্ড্রয়েড ১০ এবং ১১ ব্যবহারকারীদের তাদের ডিভাইসের অবস্থানে অ্যাপের অ্যাক্সেসের উপর আরও নিয়ন্ত্রণ দেয়।
যখন অ্যান্ড্রয়েড ১১-এ চলমান কোনও অ্যাপ লোকেশন অ্যাক্সেসের অনুরোধ করে, তখন ব্যবহারকারীদের কাছে চারটি বিকল্প থাকে:
- সব সময় অনুমতি দিন
- শুধুমাত্র অ্যাপ ব্যবহার করার সময় অনুমতি দিন (Android 10-এ)
- শুধুমাত্র একবার (অ্যান্ড্রয়েড ১১-এ)
- অস্বীকার করুন
অ্যান্ড্রয়েড ১০

অ্যান্ড্রয়েড ১১

এই কোডল্যাবে, আপনি শিখবেন কিভাবে লোকেশন আপডেট পেতে হয় এবং অ্যান্ড্রয়েডের যেকোনো সংস্করণে, বিশেষ করে অ্যান্ড্রয়েড ১০ এবং ১১-এ কীভাবে লোকেশন সাপোর্ট করতে হয়। কোডল্যাবের শেষে, আপনি এমন একটি অ্যাপ পাবেন যা লোকেশন আপডেট পুনরুদ্ধারের জন্য বর্তমান সেরা অনুশীলনগুলি অনুসরণ করে।
পূর্বশর্ত
তুমি কি করবে
- অ্যান্ড্রয়েডে অবস্থানের জন্য সেরা অনুশীলনগুলি অনুসরণ করুন।
- ফোরগ্রাউন্ড লোকেশনের অনুমতিগুলি পরিচালনা করুন (যখন ব্যবহারকারী আপনার অ্যাপ ব্যবহারের সময় ডিভাইসের লোকেশন অ্যাক্সেস করার অনুরোধ করেন)।
- লোকেশন অ্যাক্সেসের অনুরোধের জন্য সমর্থন যোগ করার জন্য একটি বিদ্যমান অ্যাপ পরিবর্তন করুন, লোকেশন সাবস্ক্রাইব এবং আনসাবস্ক্রাইব করার জন্য কোড যোগ করুন।
- ফোরগ্রাউন্ড লোকেশনে বা ব্যবহারের সময় লোকেশন অ্যাক্সেস করার জন্য লজিক যোগ করে অ্যান্ড্রয়েড ১০ এবং ১১ এর জন্য অ্যাপটিতে সমর্থন যোগ করুন।
তোমার যা লাগবে
- কোডটি চালানোর জন্য অ্যান্ড্রয়েড স্টুডিও 3.4 বা তার পরবর্তী সংস্করণ
- একটি ডিভাইস/এমুলেটর যা Android 10 এবং 11 এর ডেভেলপার প্রিভিউ চালাচ্ছে
2. শুরু করা
স্টার্টার প্রজেক্ট রেপো ক্লোন করুন
যত তাড়াতাড়ি সম্ভব শুরু করার জন্য, আপনি এই স্টার্টার প্রজেক্টটি তৈরি করতে পারেন। যদি আপনার Git ইনস্টল করা থাকে, তাহলে আপনি কেবল নিম্নলিখিত কমান্ডটি চালাতে পারেন:
git clone https://github.com/android/codelab-while-in-use-location
সরাসরি GitHub পৃষ্ঠাটি দেখতে দ্বিধা করবেন না।
যদি আপনার Git না থাকে, তাহলে আপনি প্রকল্পটি একটি জিপ ফাইল হিসেবে পেতে পারেন:
প্রকল্পটি আমদানি করুন
অ্যান্ড্রয়েড স্টুডিও খুলুন, স্বাগত স্ক্রিন থেকে " একটি বিদ্যমান অ্যান্ড্রয়েড স্টুডিও প্রকল্প খুলুন " নির্বাচন করুন এবং প্রকল্প ডিরেক্টরিটি খুলুন।
প্রকল্পটি লোড হওয়ার পরে, আপনি একটি সতর্কতাও দেখতে পাবেন যে Git আপনার সমস্ত স্থানীয় পরিবর্তনগুলি ট্র্যাক করছে না। আপনি Ignore এ ক্লিক করতে পারেন। (আপনি কোনও পরিবর্তন Git রেপোতে ফিরিয়ে আনবেন না।)
প্রজেক্ট উইন্ডোর উপরের বাম কোণে, যদি আপনি অ্যান্ড্রয়েড ভিউতে থাকেন তবে নীচের ছবির মতো কিছু দেখতে পাবেন। (যদি আপনি প্রজেক্ট ভিউতে থাকেন, তাহলে একই জিনিস দেখতে আপনাকে প্রজেক্টটি প্রসারিত করতে হবে।)

দুটি ফোল্ডার আছে ( base এবং complete )। প্রতিটি "মডিউল" নামে পরিচিত।
অনুগ্রহ করে মনে রাখবেন যে অ্যান্ড্রয়েড স্টুডিও প্রথমবারের মতো ব্যাকগ্রাউন্ডে প্রোজেক্টটি কম্পাইল করতে কয়েক সেকেন্ড সময় নিতে পারে। এই সময়ের মধ্যে, আপনি অ্যান্ড্রয়েড স্টুডিওর নীচের স্ট্যাটাস বারে নিম্নলিখিত বার্তাটি দেখতে পাবেন:

কোড পরিবর্তন করার আগে অ্যান্ড্রয়েড স্টুডিও প্রজেক্টটি ইন্ডেক্সিং এবং তৈরি করা শেষ না হওয়া পর্যন্ত অপেক্ষা করুন। এটি অ্যান্ড্রয়েড স্টুডিওকে সমস্ত প্রয়োজনীয় উপাদানগুলি টেনে আনতে অনুমতি দেবে।
যদি আপনি "ভাষা পরিবর্তন কার্যকর করার জন্য পুনরায় লোড করুন?" বা অনুরূপ কিছু বলার প্রম্পট পান, তাহলে হ্যাঁ নির্বাচন করুন।
স্টার্টার প্রজেক্টটি বুঝুন
আপনি অ্যাপে লোকেশনের জন্য অনুরোধ করার জন্য প্রস্তুত এবং প্রস্তুত। base মডিউলটিকে শুরুর বিন্দু হিসেবে ব্যবহার করুন। প্রতিটি ধাপে, base মডিউলে কোড যোগ করুন। এই কোডল্যাবটি শেষ করার সময়, base মডিউলের কোডটি complete মডিউলের বিষয়বস্তুর সাথে মিলবে। complete মডিউলটি আপনার কাজ পরীক্ষা করার জন্য অথবা কোনও সমস্যার সম্মুখীন হলে আপনাকে রেফারেন্স করার জন্য ব্যবহার করা যেতে পারে।
মূল উপাদানগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
-
MainActivity—ইউআই যাতে ব্যবহারকারী অ্যাপটিকে ডিভাইসের অবস্থান অ্যাক্সেস করতে দেয় -
LocationService— পরিষেবা যা অবস্থান পরিবর্তনের ক্ষেত্রে সাবস্ক্রাইব এবং আনসাবস্ক্রাইব করে, এবং ব্যবহারকারী অ্যাপের কার্যকলাপ থেকে দূরে সরে গেলে একটি ফোরগ্রাউন্ড পরিষেবা (একটি বিজ্ঞপ্তি সহ) হিসাবে নিজেকে উন্নীত করে। আপনি এখানে অবস্থান কোড যোগ করুন। -
Util—Locationক্লাসের জন্য এক্সটেনশন ফাংশন যোগ করে এবংSharedPreferences(সরলীকৃত ডেটা স্তর) এ লোকেশন সংরক্ষণ করে।
এমুলেটর সেটআপ
অ্যান্ড্রয়েড এমুলেটর সেট আপ করার বিষয়ে তথ্যের জন্য, রান অন অ্যা এমুলেটর দেখুন।
স্টার্টার প্রজেক্টটি চালান
আপনার অ্যাপটি চালান।
- আপনার অ্যান্ড্রয়েড ডিভাইসটি আপনার কম্পিউটারের সাথে সংযুক্ত করুন অথবা একটি এমুলেটর চালু করুন। (নিশ্চিত করুন যে ডিভাইসটি অ্যান্ড্রয়েড ১০ বা তার উচ্চতর সংস্করণে চলছে।)
- টুলবারে, ড্রপ-ডাউন নির্বাচক থেকে
baseকনফিগারেশন নির্বাচন করুন এবং Run এ ক্লিক করুন:

- আপনার ডিভাইসে নিম্নলিখিত অ্যাপটি প্রদর্শিত হচ্ছে তা লক্ষ্য করুন:

আপনি হয়তো লক্ষ্য করবেন যে আউটপুট স্ক্রিনে কোনও অবস্থানের তথ্য দেখা যাচ্ছে না। কারণ আপনি এখনও অবস্থান কোড যোগ করেননি।
৩. অবস্থান যোগ করা
ধারণা
এই কোডল্যাবের মূল লক্ষ্য হল আপনাকে দেখানো যে কীভাবে লোকেশন আপডেট পাবেন এবং অবশেষে অ্যান্ড্রয়েড ১০ এবং অ্যান্ড্রয়েড ১১ সমর্থন করবেন।
তবে, কোডিং শুরু করার আগে, মৌলিক বিষয়গুলি পর্যালোচনা করা বুদ্ধিমানের কাজ।
লোকেশন অ্যাক্সেসের ধরণ
কোডল্যাবের শুরু থেকেই লোকেশন অ্যাক্সেসের জন্য চারটি ভিন্ন বিকল্প আপনার মনে থাকতে পারে। এগুলোর অর্থ কী তা একবার দেখে নিন:
- শুধুমাত্র অ্যাপ ব্যবহার করার সময় অনুমতি দিন
- এই বিকল্পটি বেশিরভাগ অ্যাপের জন্য প্রস্তাবিত বিকল্প। "যখন ব্যবহার করা হয়" বা "শুধুমাত্র ফোরগ্রাউন্ড" অ্যাক্সেস নামেও পরিচিত, এই বিকল্পটি অ্যান্ড্রয়েড ১০-এ যোগ করা হয়েছিল এবং ডেভেলপারদের শুধুমাত্র অ্যাপটি সক্রিয়ভাবে ব্যবহৃত হওয়ার সময় অবস্থান পুনরুদ্ধার করতে দেয়। নিম্নলিখিতগুলির মধ্যে যেকোনো একটি সত্য হলে একটি অ্যাপ সক্রিয় বলে বিবেচিত হবে:
- একটি কার্যকলাপ দৃশ্যমান।
- একটি ফোরগ্রাউন্ড পরিষেবা চলমান বিজ্ঞপ্তি সহ চলছে।
- শুধুমাত্র একবার
- অ্যান্ড্রয়েড ১১-এ যোগ করা হয়েছে, এটি "অনলি অ্যাপ্লিকেশান ব্যবহারের সময় অনুমতি দিন" এর মতোই, তবে সীমিত সময়ের জন্য। আরও তথ্যের জন্য, "এককালীন অনুমতি" দেখুন।
- অস্বীকার করুন
- এই বিকল্পটি অবস্থানের তথ্যে অ্যাক্সেস বাধা দেয়।
- সব সময় অনুমতি দিন
- এই বিকল্পটি সর্বদা অবস্থান অ্যাক্সেসের অনুমতি দেয়, তবে Android 10 এবং উচ্চতর সংস্করণের জন্য অতিরিক্ত অনুমতির প্রয়োজন হয় । আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার একটি বৈধ ব্যবহারের কেস আছে এবং অবস্থান নীতিগুলি মেনে চলছে। আপনি এই কোডল্যাবে এই বিকল্পটি কভার করবেন না, কারণ এটি একটি বিরল ব্যবহারের কেস। তবে, যদি আপনার একটি বৈধ ব্যবহারের কেস থাকে এবং ব্যাকগ্রাউন্ডে অবস্থান অ্যাক্সেস সহ সর্বকালের অবস্থান কীভাবে সঠিকভাবে পরিচালনা করবেন তা বুঝতে চান, তাহলে LocationUpdatesBackgroundKotlin নমুনাটি পর্যালোচনা করুন।
পরিষেবা, ফোরগ্রাউন্ড পরিষেবা এবং বাইন্ডিং
অ্যাপ লোকেশন আপডেট ব্যবহার করার সময় শুধুমাত্র Allow সম্পূর্ণরূপে সমর্থন করার জন্য, ব্যবহারকারী কখন আপনার অ্যাপ থেকে দূরে সরে যান তা আপনাকে হিসাব করতে হবে। আপনি যদি সেই পরিস্থিতিতে আপডেটগুলি পেতে চান, তাহলে আপনাকে একটি ফোরগ্রাউন্ড Service তৈরি করতে হবে এবং এটি একটি Notification এর সাথে সংযুক্ত করতে হবে।
এছাড়াও, যদি আপনি একই Service ব্যবহার করে আপনার অ্যাপটি দৃশ্যমান হওয়ার সময় এবং ব্যবহারকারী যখন আপনার অ্যাপ থেকে দূরে সরে যান তখন অবস্থান আপডেটের অনুরোধ করতে চান, তাহলে আপনাকে সেই Service UI উপাদানের সাথে আবদ্ধ/আনবাইন্ড করতে হবে।
যেহেতু এই কোডল্যাবটি শুধুমাত্র লোকেশন আপডেট পাওয়ার উপর জোর দেয়, তাই আপনি ForegroundOnlyLocationService.kt ক্লাসে আপনার প্রয়োজনীয় সমস্ত কোড খুঁজে পেতে পারেন। আপনি সেই ক্লাস এবং MainActivity.kt ব্রাউজ করে দেখতে পারেন যে তারা কীভাবে একসাথে কাজ করে।
আরও তথ্যের জন্য, পরিষেবাগুলির ওভারভিউ এবং বাউন্ড পরিষেবাগুলির ওভারভিউ দেখুন।
অনুমতিসমূহ
NETWORK_PROVIDER অথবা GPS_PROVIDER থেকে অবস্থানের আপডেট পেতে, আপনাকে অবশ্যই আপনার Android ম্যানিফেস্ট ফাইলে যথাক্রমে ACCESS_COARSE_LOCATION অথবা ACCESS_FINE_LOCATION অনুমতি ঘোষণা করে ব্যবহারকারীর অনুমতি চাইতে হবে। এই অনুমতি ছাড়া, আপনার অ্যাপ রানটাইমে অবস্থান অ্যাক্সেসের অনুরোধ করতে পারবে না।
যখন আপনার অ্যাপটি অ্যান্ড্রয়েড ১০ বা তার উচ্চতর ভার্সন চলমান ডিভাইসে ব্যবহৃত হয়, তখন এই অনুমতিগুলি "একবার শুধুমাত্র" এবং "অনুমতি দিন শুধুমাত্র" এর মধ্যে অন্তর্ভুক্ত থাকে।
স্থান
আপনার অ্যাপ com.google.android.gms.location প্যাকেজের ক্লাসের মাধ্যমে সমর্থিত লোকেশন পরিষেবাগুলির সেট অ্যাক্সেস করতে পারে।
প্রধান ক্লাসগুলো দেখুন:
-
FusedLocationProviderClient - এটি লোকেশন ফ্রেমওয়ার্কের কেন্দ্রীয় উপাদান। একবার তৈরি হয়ে গেলে, আপনি লোকেশন আপডেটের অনুরোধ করতে এবং সর্বশেষ পরিচিত লোকেশন পেতে এটি ব্যবহার করতে পারেন।
-
LocationRequest - এটি এমন একটি ডেটা অবজেক্ট যাতে অনুরোধের জন্য পরিষেবার মান (আপডেট, অগ্রাধিকার এবং নির্ভুলতার ব্যবধান) পরামিতি থাকে। আপনি যখন অবস্থান আপডেটের অনুরোধ করেন তখন এটি
FusedLocationProviderClientএ প্রেরণ করা হয়। -
LocationCallback - ডিভাইসের অবস্থান পরিবর্তিত হলে বা আর নির্ধারণ করা না গেলে বিজ্ঞপ্তি পাওয়ার জন্য এটি ব্যবহার করা হয়। এটি একটি
LocationResultপাস করে যেখানে আপনি আপনার ডাটাবেসেLocationসংরক্ষণ করতে পারেন।
এখন যেহেতু তুমি কি করছো সে সম্পর্কে একটা প্রাথমিক ধারণা পেয়েছো, কোড দিয়ে শুরু করো!
৪. অবস্থান বৈশিষ্ট্য যোগ করুন
এই কোডল্যাবটি সবচেয়ে সাধারণ অবস্থান বিকল্পের উপর দৃষ্টি নিবদ্ধ করে: অ্যাপটি ব্যবহার করার সময় শুধুমাত্র অনুমতি দিন ।
অবস্থানের আপডেট পেতে, আপনার অ্যাপের হয় দৃশ্যমান কার্যকলাপ থাকতে হবে অথবা অগ্রভাগে চলমান একটি পরিষেবা থাকতে হবে (একটি বিজ্ঞপ্তি সহ)।
অনুমতিসমূহ
এই কোডল্যাবের উদ্দেশ্য হল লোকেশনের অনুমতির জন্য অনুরোধ করার পদ্ধতি নয়, লোকেশন আপডেট কীভাবে পাবেন তা দেখানো, তাই অনুমতি-ভিত্তিক কোডটি ইতিমধ্যেই আপনার জন্য লেখা। যদি আপনি ইতিমধ্যেই এটি বুঝতে পারেন তবে এটি এড়িয়ে যেতে দ্বিধা করবেন না।
অনুমতি সংক্রান্ত হাইলাইটগুলি নিম্নরূপ (এই অংশের জন্য কোনও পদক্ষেপের প্রয়োজন নেই):
-
AndroidManifest.xmlএ আপনি কোন অনুমতি ব্যবহার করছেন তা ঘোষণা করুন। - অবস্থানের তথ্য অ্যাক্সেস করার চেষ্টা করার আগে, ব্যবহারকারী আপনার অ্যাপটিকে অনুমতি দিয়েছেন কিনা তা পরীক্ষা করে দেখুন। যদি আপনার অ্যাপটি এখনও অনুমতি না পেয়ে থাকে, তাহলে অ্যাক্সেসের জন্য অনুরোধ করুন।
- ব্যবহারকারীর অনুমতি পছন্দটি পরিচালনা করুন। (আপনি এই কোডটি
MainActivity.ktএ দেখতে পারেন।)
যদি আপনি AndroidManifest.xml অথবা MainActivity.kt তে TODO: Step 1.0, Review Permissions অনুসন্ধান করেন, তাহলে আপনি অনুমতির জন্য লেখা সমস্ত কোড দেখতে পাবেন।
আরও তথ্যের জন্য, অনুমতিগুলির ওভারভিউ দেখুন।
এখন, কিছু লোকেশন কোড লেখা শুরু করুন।
অবস্থান আপডেটের জন্য প্রয়োজনীয় মূল ভেরিয়েবলগুলি পর্যালোচনা করুন
base মডিউলে, TODO: Step 1.1, Review variables
ForegroundOnlyLocationService.kt ফাইল।
এই ধাপে কোনও পদক্ষেপ নেওয়ার প্রয়োজন নেই। অবস্থান আপডেট পেতে আপনি যে মূল ক্লাস এবং ভেরিয়েবলগুলি ব্যবহার করেন তা বোঝার জন্য আপনাকে কেবল মন্তব্য সহ নিম্নলিখিত কোড ব্লকটি পর্যালোচনা করতে হবে।
// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest
// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback
// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null
FusedLocationProviderClient আরম্ভকরণ পর্যালোচনা করুন
base মডিউলে, TODO অনুসন্ধান করুন: ধাপ ১.২, ForegroundOnlyLocationService.kt ফাইলে TODO: Step 1.2, Review the FusedLocationProviderClient । আপনার কোডটি এরকম কিছু দেখাবে:
// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
আগের মন্তব্যে যেমন উল্লেখ করা হয়েছে, এটি অবস্থান আপডেট পাওয়ার জন্য প্রধান ক্লাস। ভেরিয়েবলটি ইতিমধ্যেই আপনার জন্য ইনিশিয়ালাইজ করা হয়েছে, তবে এটি কীভাবে ইনিশিয়ালাইজ করা হয়েছে তা বোঝার জন্য কোডটি পর্যালোচনা করা গুরুত্বপূর্ণ। অবস্থান আপডেটের অনুরোধ করার জন্য আপনি পরে এখানে কিছু কোড যোগ করুন।
LocationRequest আরম্ভ করুন
-
baseমডিউলে,ForegroundOnlyLocationService.ktফাইলেTODO: Step 1.3, Create a LocationRequestঅনুসন্ধান করুন। - মন্তব্যের পরে নিম্নলিখিত কোডটি যোগ করুন।
LocationRequest ইনিশিয়ালাইজেশন কোডটি আপনার অনুরোধের জন্য প্রয়োজনীয় অতিরিক্ত পরিষেবার মানের পরামিতি যোগ করে (ব্যবধান, সর্বোচ্চ অপেক্ষার সময় এবং অগ্রাধিকার)।
// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest.create().apply {
// Sets the desired interval for active location updates. This interval is inexact. You
// may not receive updates at all if no location sources are available, or you may
// receive them less frequently than requested. You may also receive updates more
// frequently than requested if other applications are requesting location at a more
// frequent interval.
//
// IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
// targetSdkVersion) may receive updates less frequently than this interval when the app
// is no longer in the foreground.
interval = TimeUnit.SECONDS.toMillis(60)
// Sets the fastest rate for active location updates. This interval is exact, and your
// application will never receive updates more frequently than this value.
fastestInterval = TimeUnit.SECONDS.toMillis(30)
// Sets the maximum time when batched location updates are delivered. Updates may be
// delivered sooner than this interval.
maxWaitTime = TimeUnit.MINUTES.toMillis(2)
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
- প্রতিটি কীভাবে কাজ করে তা বুঝতে মন্তব্যগুলি পড়ুন।
লোকেশন কলব্যাক আরম্ভ করুন
-
baseমডিউলে, TODO অনুসন্ধান করুন: ধাপ ১.৪,ForegroundOnlyLocationService.ktফাইলেTODO: Step 1.4, Initialize the LocationCallback। - মন্তব্যের পরে নিম্নলিখিত কোডটি যোগ করুন।
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
super.onLocationResult(locationResult)
// Normally, you want to save a new location to a database. We are simplifying
// things a bit and just saving it as a local variable, as we only need it again
// if a Notification is created (when the user navigates away from app).
currentLocation = locationResult.lastLocation
// Notify our Activity that a new location was added. Again, if this was a
// production app, the Activity would be listening for changes to a database
// with new locations, but we are simplifying things a bit to focus on just
// learning the location side of things.
val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
intent.putExtra(EXTRA_LOCATION, currentLocation)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)
// Updates notification content if this service is running as a foreground
// service.
if (serviceRunningInForeground) {
notificationManager.notify(
NOTIFICATION_ID,
generateNotification(currentLocation))
}
}
}
আপনি এখানে যে LocationCallback তৈরি করবেন তা হল সেই কলব্যাক যা FusedLocationProviderClient একটি নতুন লোকেশন আপডেট উপলব্ধ হলে কল করবে।
আপনার কলব্যাকে, আপনি প্রথমে LocationResult অবজেক্ট ব্যবহার করে সর্বশেষ অবস্থানটি পাবেন। এরপর, আপনি একটি স্থানীয় সম্প্রচার (যদি এটি সক্রিয় থাকে) ব্যবহার করে আপনার Activity কে নতুন অবস্থান সম্পর্কে অবহিত করবেন অথবা যদি এই পরিষেবাটি ফোরগ্রাউন্ড Service হিসাবে চলমান থাকে তবে আপনি Notification আপডেট করবেন।
- প্রতিটি অংশ কী করে তা বুঝতে মন্তব্যগুলি পড়ুন।
অবস্থান পরিবর্তনের জন্য সাবস্ক্রাইব করুন
এখন যেহেতু আপনি সবকিছু শুরু করেছেন, আপনাকে FusedLocationProviderClient কে জানাতে হবে যে আপনি আপডেট পেতে চান।
-
baseমডিউলে,ForegroundOnlyLocationService.ktফাইলেStep 1.5, Subscribe to location changes। - মন্তব্যের পরে নিম্নলিখিত কোডটি যোগ করুন।
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
requestLocationUpdates() কলটি FusedLocationProviderClient কে জানাবে যে আপনি অবস্থানের আপডেট পেতে চান।
আপনি সম্ভবত LocationRequest এবং LocationCallback চিনতে পেরেছেন, যেগুলো আপনি আগে সংজ্ঞায়িত করেছিলেন। এগুলো FusedLocationProviderClient আপনার অনুরোধের জন্য পরিষেবার মান এবং আপডেটের সময় এটি কী কল করা উচিত তা জানতে দেয়। অবশেষে, Looper অবজেক্ট কলব্যাকের জন্য থ্রেড নির্দিষ্ট করে।
আপনি হয়তো লক্ষ্য করবেন যে এই কোডটি একটি try/catch স্টেটমেন্টের মধ্যে রয়েছে। এই পদ্ধতিতে এই ধরনের ব্লক প্রয়োজন কারণ SecurityException তখন ঘটে যখন আপনার অ্যাপের অবস্থানের তথ্য অ্যাক্সেস করার অনুমতি নেই।
অবস্থান পরিবর্তন থেকে সদস্যতা ত্যাগ করুন
যখন অ্যাপটির আর অবস্থানের তথ্য অ্যাক্সেসের প্রয়োজন হয় না, তখন অবস্থান আপডেট থেকে সদস্যতা ত্যাগ করা গুরুত্বপূর্ণ।
-
baseমডিউলে, TODO অনুসন্ধান করুন: ধাপ ১.৬,ForegroundOnlyLocationService.ktফাইলেTODO: Step 1.6, Unsubscribe to location changes। - মন্তব্যের পরে নিম্নলিখিত কোডটি যোগ করুন।
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d(TAG, "Location Callback removed.")
stopSelf()
} else {
Log.d(TAG, "Failed to remove Location Callback.")
}
}
removeLocationUpdates() পদ্ধতিটি একটি টাস্ক সেট আপ করে যা FusedLocationProviderClient জানায় যে আপনি আর আপনার LocationCallback এর জন্য লোকেশন আপডেট পেতে চান না। addOnCompleteListener() সম্পূর্ণ করার জন্য কলব্যাক দেয় এবং Task কার্যকর করে।
আগের ধাপের মতো, আপনি হয়তো লক্ষ্য করেছেন যে এই কোডটি একটি try/catch স্টেটমেন্টের মধ্যে রয়েছে। এই পদ্ধতিতে এই ধরনের ব্লকের প্রয়োজন হয় কারণ যখন আপনার অ্যাপের অবস্থানের তথ্য অ্যাক্সেস করার অনুমতি থাকে না তখন SecurityException ঘটে।
আপনি হয়তো ভাবতে পারেন যে সাবস্ক্রাইব/আনসাবস্ক্রাইব কোড ধারণকারী পদ্ধতিগুলি কখন কল করা হয়। ব্যবহারকারী যখন বোতামটি ট্যাপ করেন তখন এগুলি প্রধান ক্লাসে ট্রিগার হয়। আপনি যদি এটি দেখতে চান, তাহলে MainActivity.kt ক্লাসটি দেখুন।
অ্যাপ চালান
অ্যান্ড্রয়েড স্টুডিও থেকে আপনার অ্যাপটি চালান এবং লোকেশন বোতামটি চেষ্টা করুন।
আউটপুট স্ক্রিনে আপনার অবস্থানের তথ্য দেখা উচিত। এটি অ্যান্ড্রয়েড ৯ এর জন্য একটি সম্পূর্ণ কার্যকরী অ্যাপ।


৫. অ্যান্ড্রয়েড ১০ সাপোর্ট করুন
এই বিভাগে, আপনি Android 10 এর জন্য সমর্থন যোগ করবেন।
আপনার অ্যাপটি ইতিমধ্যেই অবস্থান পরিবর্তনের জন্য সাবস্ক্রাইব করেছে, তাই খুব বেশি কাজ করার নেই।
আসলে, আপনাকে যা করতে হবে তা হল আপনার ফোরগ্রাউন্ড পরিষেবাটি অবস্থানের উদ্দেশ্যে ব্যবহৃত হচ্ছে কিনা তা নির্দিষ্ট করে দিতে হবে।
টার্গেট SDK 29
-
baseমডিউলে,build.gradleফাইলেTODO: Step 2.1, Target Android 10 and then Android 11.অনুসন্ধান করুন। - এই পরিবর্তনগুলি করুন:
-
targetSdkVersionকে29এ সেট করুন।
আপনার কোডটি দেখতে এরকম কিছু হওয়া উচিত:
android {
// TODO: Step 2.1, Target Android 10 and then Android 11.
compileSdkVersion 29
defaultConfig {
applicationId "com.example.android.whileinuselocation"
minSdkVersion 26
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
...
}
এটি করার পরে, আপনাকে আপনার প্রকল্পটি সিঙ্ক করতে বলা হবে। সিঙ্ক এখন ক্লিক করুন।

এর পরে, আপনার অ্যাপটি অ্যান্ড্রয়েড ১০ এর জন্য প্রায় প্রস্তুত।
ফোরগ্রাউন্ড পরিষেবার ধরণ যোগ করুন
অ্যান্ড্রয়েড ১০-এ, ব্যবহারের সময় লোকেশন অ্যাক্সেসের প্রয়োজন হলে আপনার ফোরগ্রাউন্ড পরিষেবার ধরণ অন্তর্ভুক্ত করতে হবে। আপনার ক্ষেত্রে, এটি লোকেশন তথ্য পেতে ব্যবহৃত হচ্ছে।
base মডিউলে, TODO: 2.2, Add foreground service type AndroidManifest.xml এ foreground service type যোগ করুন এবং <service> এলিমেন্টে নিম্নলিখিত কোডটি যোগ করুন:
android:foregroundServiceType="location"
আপনার কোডটি দেখতে এরকম কিছু হওয়া উচিত:
<application>
...
<!-- Foreground services in Android 10+ require type. -->
<!-- TODO: 2.2, Add foreground service type. -->
<service
android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="location" />
</application>
এই তো! আপনার অ্যাপটি Android-এ অবস্থানের জন্য সেরা অনুশীলনগুলি অনুসরণ করে "ব্যবহারের সময়" Android 10 অবস্থান সমর্থন করে।
অ্যাপ চালান
অ্যান্ড্রয়েড স্টুডিও থেকে আপনার অ্যাপটি চালান এবং লোকেশন বোতামটি চেষ্টা করুন।
সবকিছু আগের মতোই কাজ করা উচিত, কিন্তু এখন এটি অ্যান্ড্রয়েড ১০-এ কাজ করে। যদি আপনি আগে অবস্থানের জন্য অনুমতি গ্রহণ না করে থাকেন, তাহলে এখন আপনার অনুমতির স্ক্রিনটি দেখা উচিত!



৬. অ্যান্ড্রয়েড ১১ সাপোর্ট করুন
এই বিভাগে, আপনি অ্যান্ড্রয়েড ১১ কে লক্ষ্য করবেন।
দারুন খবর, build.gradle ফাইল ছাড়া আর কোনও ফাইলে পরিবর্তন করার দরকার নেই!
টার্গেট SDK 11
-
baseমডিউলে,build.gradleফাইলেTODO: Step 2.1, Target SDKঅনুসন্ধান করুন। - এই পরিবর্তনগুলি করুন:
-
compileSdkVersion30এ -
targetSdkVersionথেকে30
আপনার কোডটি দেখতে এরকম কিছু হওয়া উচিত:
android {
TODO: Step 2.1, Target Android 10 and then Android 11.
compileSdkVersion 30
defaultConfig {
applicationId "com.example.android.whileinuselocation"
minSdkVersion 26
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
...
}
এটি করার পরে, আপনাকে আপনার প্রকল্পটি সিঙ্ক করতে বলা হবে। সিঙ্ক এখন ক্লিক করুন।

এর পরে, আপনার অ্যাপটি অ্যান্ড্রয়েড ১১ এর জন্য প্রস্তুত!
অ্যাপ চালান
অ্যান্ড্রয়েড স্টুডিও থেকে আপনার অ্যাপটি চালান এবং বোতামটি ক্লিক করার চেষ্টা করুন।
সবকিছু আগের মতোই কাজ করা উচিত, কিন্তু এখন এটি অ্যান্ড্রয়েড ১১-তে কাজ করে। যদি আপনি আগে অবস্থানের জন্য অনুমতি গ্রহণ না করে থাকেন, তাহলে এখন আপনার অনুমতির স্ক্রিনটি দেখা উচিত!


৭. অ্যান্ড্রয়েডের জন্য অবস্থান কৌশল
এই কোডল্যাবে দেখানো পদ্ধতিতে অবস্থানের অনুমতি পরীক্ষা করে এবং অনুরোধ করে, আপনার অ্যাপটি ডিভাইসের অবস্থান সম্পর্কিত তার অ্যাক্সেস স্তর সফলভাবে ট্র্যাক করতে পারে।
এই পৃষ্ঠায় অবস্থানের অনুমতি সম্পর্কিত কয়েকটি মূল সেরা অনুশীলনের তালিকা দেওয়া হয়েছে। আপনার ব্যবহারকারীর ডেটা কীভাবে নিরাপদ রাখবেন সে সম্পর্কে আরও তথ্যের জন্য, অ্যাপ অনুমতির সেরা অনুশীলন দেখুন।
আপনার প্রয়োজনীয় অনুমতিগুলিই কেবল জিজ্ঞাসা করুন
শুধুমাত্র প্রয়োজন হলেই অনুমতি চাইতে হবে। উদাহরণস্বরূপ:
- একেবারে প্রয়োজন না হলে অ্যাপ স্টার্টআপের সময় অবস্থানের অনুমতির জন্য অনুরোধ করবেন না।
- যদি আপনার অ্যাপটি Android 10 বা তার পরবর্তী ভার্সনের জন্য উপযুক্ত হয় এবং আপনার একটি ফোরগ্রাউন্ড পরিষেবা থাকে, তাহলে ম্যানিফেস্টে
"location"এর একটিforegroundServiceTypeঘোষণা করুন। - ব্যবহারকারীর অবস্থানে নিরাপদ এবং আরও স্বচ্ছ অ্যাক্সেস -এ বর্ণিত বৈধ ব্যবহারের ক্ষেত্রে না থাকলে ব্যাকগ্রাউন্ড অবস্থানের অনুমতির জন্য অনুরোধ করবেন না।
অনুমতি না পেলে সুন্দর অবক্ষয়কে সমর্থন করুন
ভালো ব্যবহারকারীর অভিজ্ঞতা বজায় রাখার জন্য, আপনার অ্যাপটি এমনভাবে ডিজাইন করুন যাতে এটি নিম্নলিখিত পরিস্থিতিগুলি সুন্দরভাবে পরিচালনা করতে পারে:
- আপনার অ্যাপের অবস্থানের তথ্যে কোনও অ্যাক্সেস নেই।
- ব্যাকগ্রাউন্ডে চলার সময় আপনার অ্যাপের অবস্থানের তথ্যে অ্যাক্সেস নেই।
৮. অভিনন্দন
আপনি সেরা অনুশীলনগুলি মাথায় রেখে অ্যান্ড্রয়েডে অবস্থানের আপডেটগুলি কীভাবে পাবেন তা শিখেছেন!
আরও জানুন
- যদি আপনার কাছে বৈধ ব্যবহারের কেস থাকে, তাহলে ব্যাকগ্রাউন্ড লোকেশন ব্যবহারের জন্য সম্পূর্ণ নমুনা
- অবস্থান আপডেটের জন্য অনুরোধ করুন