আপনার অ্যাপকে লোকেশন অ্যাক্সেস করার অনুরোধ করতে হলে বা অনুমতি সংক্রান্ত আপডেট পেতে হলে, ডিভাইসে উপযুক্ত সিস্টেম সেটিংস চালু করতে হবে, যেমন জিপিএস বা ওয়াই-ফাই
স্ক্যানিং। ডিভাইসের জিপিএস-এর মতো পরিষেবা সরাসরি চালু করার পরিবর্তে,
আপনার অ্যাপ প্রয়োজনীয় অ্যাকুরেসি/পাওয়ার কনজাম্পশন লেভেল এবং
আপডেটের জন্য কাঙ্ক্ষিত সময়সীমা নির্দিষ্ট করে এবং ডিভাইস অটোমেটিক সিস্টেম সেটিংসে
প্রয়োজনীয় পরিবর্তন করে। এইসব সেটিংস
LocationRequest
ডেটা অবজেক্ট দ্বারা সংজ্ঞায়িত করা হয়।
এই টিউটোরিয়াল থেকে আপনি জানতে পারবেন যে কোন সেটিংস চালু আছে তা চেক করার জন্য কীভাবে Settings Client ব্যবহার করতে হয় এবং ব্যবহারকারী যাতে এক ট্যাপেই সেটিংস আপডেট করতে পারেন তার জন্য লোকেশন সেটিংস ডায়ালগ দেখাতে হয়।
লোকেশন পরিষেবা কনফিগার করুন
Google Play পরিষেবা এবং ফিউজড লোকেশন প্রোভাইডারের মাধ্যমে প্রদান করা লোকেশন পরিষেবা ব্যবহার করতে, সেটিংস ক্লায়েন্ট ব্যবহার করে আপনার অ্যাপ কানেক্ট করুন, তারপর বর্তমান লোকেশন সেটিংস চেক করুন এবং প্রয়োজন হলে ব্যবহারকারীকে প্রয়োজনীয় সেটিংস চালু করার জন্য প্রম্পট করুন।
যেসব অ্যাপের ফিচার লোকেশন পরিষেবা ব্যবহার করে, সেগুলিকে অবশ্যই লোকেশন সংক্রান্ত অনুমতি চাইতে হবে, যা সেইসব ফিচারের ব্যবহারের উপর নির্ভর করে।
লোকেশন শেয়ার করার অনুরোধ সেট-আপ করা
ফিউজড লোকেশন প্রোভাইডারের কাছে অনুরোধের জন্য প্যারামিটার স্টোর করতে, একটি
LocationRequest তৈরি করুন।
প্যারামিটারগুলি লোকেশন অনুরোধের জন্য নির্ভুলতার স্তর নির্ধারণ করে। উপলভ্য
সব লোকেশন অনুরোধের বিকল্পের বিবরণ জানতে, LocationRequest
ক্লাস রেফারেন্স দেখুন। এই পাঠে আপডেট ইন্টারভাল, সবচেয়ে দ্রুত আপডেট ইন্টারভাল এবং অগ্রাধিকার সেট করা হয়,
যেমন নিচে বর্ণনা করা হয়েছে:
- আপডেট ইন্টারভাল
-
setIntervalMillis()- এই পদ্ধতিটি মিলিসেকেন্ডে রেট সেট করে যে রেটে আপনার অ্যাপ লোকেশন আপডেট পেতে পছন্দ করে। মনে রাখবেন যে ব্যাটারির ব্যবহার অপ্টিমাইজ করার জন্য লোকেশন আপডেট এই হারের থেকে কিছুটা দ্রুত বা ধীর হতে পারে অথবা কোনও আপডেট নাও থাকতে পারে (যেমন, ডিভাইসে কানেক্টিভিটি না থাকলে)। - সবচেয়ে দ্রুত আপডেট করার ইন্টারভাল
-
setMinUpdateIntervalMillis()- এই পদ্ধতিটি মিলি সেকেন্ডে সবচেয়ে দ্রুত রেট সেট করে যেখানে আপনার অ্যাপ লোকেশন আপডেট ম্যানেজ করতে পারে।setInterval()-এ উল্লেখ করা রেটের চেয়ে আরও দ্রুত আপডেট পাওয়ার মাধ্যমে আপনার অ্যাপ উপকৃত না হলে, আপনাকে এই পদ্ধতি কল করতে হবে না। - অগ্রাধিকার
-
setPriority()- এই পদ্ধতি অনুরোধের অগ্রাধিকার সেট করে, যা Google Play পরিষেবার লোকেশন পরিষেবাকে কোন লোকেশন সোর্স ব্যবহার করতে হবে সেই সম্পর্কে একটি শক্তিশালী ইঙ্গিত দেয়। নিম্নলিখিত মানগুলি কাজ করে:-
PRIORITY_BALANCED_POWER_ACCURACY- শহরের কোনও ব্লকের মধ্যে লোকেশন প্রিসিশনের অনুরোধ করতে এই সেটিং ব্যবহার করুন, যা প্রায় ১০০ মিটারের অ্যাকুরেসি প্রদান করে। এটি নির্ভুলতার একটি মোটা স্তর হিসাবে বিবেচিত হয় এবং কম বিদ্যুৎ খরচ করতে পারে। এই সেটিংয়ের মাধ্যমে, লোকেশন পরিষেবা ওয়াই-ফাই এবং সেল টাওয়ার পজিশনিং ব্যবহার করতে পারে। তবে মনে রাখবেন, লোকেশন প্রদানকারী বেছে নেওয়ার বিষয়টি অন্যান্য অনেক বিষয়ের উপর নির্ভর করে, যেমন কোন সোর্স উপলভ্য আছে। -
PRIORITY_HIGH_ACCURACY- যতটা সম্ভব সুনির্দিষ্ট লোকেশন জানার অনুরোধ করতে এই সেটিং ব্যবহার করুন। এই সেটিংয়ের মাধ্যমে, লোকেশন পরিষেবা, লোকেশন নির্ধারণ করার জন্য জিপিএস ব্যবহার করার সম্ভাবনা বেশি। PRIORITY_LOW_POWER- শহর-লেভেল নির্ভুলতার জন্য অনুরোধ করতে এই সেটিং ব্যবহার করুন, যা প্রায় ১০ কিলোমিটারের নির্ভুলতা। এটি নির্ভুলতার একটি মোটা স্তর হিসাবে বিবেচিত হয় এবং এতে কম বিদ্যুৎ খরচ হওয়ার সম্ভাবনা থাকে।PRIORITY_PASSIVE- ব্যাটারি খরচ যাতে খুব কম হয় তার জন্য এই সেটিং ব্যবহার করুন, তবে লোকেশন আপডেট উপলভ্য হলে তা পেতে চান। এই সেটিংয়ের মাধ্যমে, আপনার অ্যাপ কোনও লোকেশন আপডেট ট্রিগার করে না, তবে অন্যান্য অ্যাপের মাধ্যমে ট্রিগার করা লোকেশন রিসিভ করে।
-
লোকেশন সংক্রান্ত অনুরোধ তৈরি করুন এবং এই কোড স্যাম্পেলে দেখানো প্যারামিটার সেট করুন:
Kotlin
fun createLocationRequest() { val locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10000) .setMinUpdateIntervalMillis(5000) .build() }
জাভা
protected void createLocationRequest() { LocationRequest locationRequest = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10000) .setMinUpdateIntervalMillis(5000) .build(); }
PRIORITY_HIGH_ACCURACY-এর
অগ্রাধিকার,
অ্যাপ ম্যানিফেস্টে আপনার উল্লেখ করা
ACCESS_FINE_LOCATION
অনুমতি সেটিংস এবং ৫০০০ মিলিসেকেন্ডের (৫ সেকেন্ড) দ্রুত আপডেট
ইন্টারভ্যালের সাথে যুক্ত হয়ে, ফিউজড লোকেশন
প্রোভাইডারকে লোকেশন আপডেট প্রদান করতে সাহায্য করে যা কয়েক ফুটের মধ্যে নির্ভুল হয়।
এই পদ্ধতিটি ম্যাপিং অ্যাপের জন্য উপযুক্ত যা রিয়েল টাইমে লোকেশন দেখায়।
পারফর্ম্যান্স সংক্রান্ত ইঙ্গিত: লোকেশন আপডেট পাওয়ার পরে আপনার অ্যাপ নেটওয়ার্ক অ্যাক্সেস করলে বা অন্য কোনও দীর্ঘমেয়াদী কাজ করলে, সবচেয়ে দ্রুত ইন্টারভ্যালকে আরও ধীরগতির ভ্যালুতে অ্যাডজাস্ট করুন। এই অ্যাডজাস্টমেন্ট আপনার অ্যাপকে এমন আপডেট পাওয়া থেকে আটকায় যা এটি ব্যবহার করতে পারে না। দীর্ঘ সময় ধরে চলা কাজ সম্পূর্ণ হয়ে গেলে, সবচেয়ে দ্রুত ইন্টারভ্যালকে আবার দ্রুত ভ্যালুতে সেট করুন।
বর্তমান লোকেশন সেটিংস পান
আপনি Google Play পরিষেবা এবং লোকেশন পরিষেবা API-এর সাথে কানেক্ট করার পরে, ব্যবহারকারীর ডিভাইসের বর্তমান লোকেশন সেটিংস পেতে পারবেন। এটি করতে,
একটি LocationSettingsRequest.Builder
তৈরি করুন
এবং এক বা একাধিক লোকেশন সংক্রান্ত অনুরোধ যোগ করুন। নিম্নলিখিত কোড স্নিপেট থেকে জানা যায় যে
আগের ধাপে তৈরি করা লোকেশন অনুরোধ কীভাবে যোগ করতে হয়:
Kotlin
val builder = LocationSettingsRequest.Builder() .addLocationRequest(locationRequest)
জাভা
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest);
এরপর, বর্তমান লোকেশন সেটিংস ঠিক আছে কিনা তা চেক করুন:
Kotlin
val builder = LocationSettingsRequest.Builder() // ... val client: SettingsClient = LocationServices.getSettingsClient(this) val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
জাভা
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); // ... SettingsClient client = LocationServices.getSettingsClient(this); Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
Task
সম্পূর্ণ হলে, আপনার অ্যাপ LocationSettingsResponse
অবজেক্ট থেকে স্ট্যাটাস কোড দেখে লোকেশন সেটিংস চেক করতে
পারবে। প্রাসঙ্গিক লোকেশন সেটিংসের বর্তমান অবস্থা সম্পর্কে আরও বিশদ বিবরণ পেতে, আপনার অ্যাপ
LocationSettingsResponse
অবজেক্টের
getLocationSettingsStates()
পদ্ধতি কল করতে পারে।
ব্যবহারকারীকে লোকেশন সেটিংস পরিবর্তন করার জন্য প্রম্পট করুন
লোকেশন অনুরোধের জন্য লোকেশন সেটিংস উপযুক্ত কিনা তা নির্ধারণ করতে,
Task অবজেক্টে একটি
OnFailureListener যোগ করুন যা লোকেশন সেটিংস যাচাই করে। তারপর,
onFailure() পদ্ধতিতে পাস করা
Exception অবজেক্টটি
ResolvableApiException ক্লাসের ইনস্ট্যান্স কিনা তা চেক করুন, যা ইঙ্গিত করে যে সেটিংস
পরিবর্তন করতে হবে। তারপর,
startResolutionForResult()-এ কল করে লোকেশন সেটিংস পরিবর্তন করার জন্য ব্যবহারকারীর থেকে অনুমতি চেয়ে একটি ডায়ালগ দেখান।
ব্যবহারকারীর লোকেশন সেটিংস, লোকেশন পরিষেবাকে
LocationRequest তৈরি করার অনুমতি দেয় কিনা তা কীভাবে নির্ধারণ করবেন এবং প্রয়োজন হলে লোকেশন সেটিংস পরিবর্তন করার জন্য ব্যবহারকারীর কাছে কীভাবে অনুমতি চাইবেন তা নিম্নলিখিত কোড স্নিপেট থেকে জানতে পারবেন:
Kotlin
task.addOnSuccessListener { locationSettingsResponse -> // All location settings are satisfied. The client can initialize // location requests here. // ... } task.addOnFailureListener { exception -> if (exception is ResolvableApiException){ // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). exception.startResolutionForResult(this@MainActivity, REQUEST_CHECK_SETTINGS) } catch (sendEx: IntentSender.SendIntentException) { // Ignore the error. } } }
জাভা
task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() { @Override public void onSuccess(LocationSettingsResponse locationSettingsResponse) { // All location settings are satisfied. The client can initialize // location requests here. // ... } }); task.addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { if (e instanceof ResolvableApiException) { // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). ResolvableApiException resolvable = (ResolvableApiException) e; resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException sendEx) { // Ignore the error. } } } });
পরবর্তী পাঠ, লোকেশন আপডেট করার অনুরোধ করুন, আপনাকে দেখায় কীভাবে পর্যায়ক্রমিক লোকেশন আপডেট পাবেন।