আপনার অ্যাপের যদি লোকেশনের জন্য অনুরোধ করার বা পারমিশন আপডেট গ্রহণ করার প্রয়োজন হয়, তাহলে ডিভাইসটিকে জিপিএস বা ওয়াই-ফাই স্ক্যানিং-এর মতো উপযুক্ত সিস্টেম সেটিংস চালু করতে হবে। ডিভাইসের জিপিএস-এর মতো পরিষেবাগুলি সরাসরি চালু না করে, আপনার অ্যাপ প্রয়োজনীয় নির্ভুলতা/বিদ্যুৎ খরচের মাত্রা এবং কাঙ্ক্ষিত আপডেটের ব্যবধান নির্দিষ্ট করে দেয়, এবং ডিভাইসটি স্বয়ংক্রিয়ভাবে সিস্টেম সেটিংসে উপযুক্ত পরিবর্তন করে নেয়। এই সেটিংসগুলি LocationRequest ডেটা অবজেক্ট দ্বারা সংজ্ঞায়িত করা হয়।
এই পাঠে দেখানো হয়েছে কীভাবে সেটিংস ক্লায়েন্ট ব্যবহার করে কোন সেটিংসগুলো সক্রিয় আছে তা পরীক্ষা করতে হয় এবং ব্যবহারকারীকে এক ট্যাপে তাদের সেটিংস আপডেট করার জন্য লোকেশন সেটিংস ডায়ালগটি উপস্থাপন করতে হয়।
অবস্থান পরিষেবাগুলি কনফিগার করুন
Google Play Services এবং ফিউজড লোকেশন প্রোভাইডার দ্বারা প্রদত্ত লোকেশন পরিষেবাগুলো ব্যবহার করার জন্য, সেটিংস ক্লায়েন্ট ব্যবহার করে আপনার অ্যাপটি সংযুক্ত করুন, তারপর বর্তমান লোকেশন সেটিংস পরীক্ষা করুন এবং প্রয়োজনে ব্যবহারকারীকে প্রয়োজনীয় সেটিংস চালু করার জন্য অনুরোধ করুন।
যেসব অ্যাপের ফিচার লোকেশন সার্ভিস ব্যবহার করে, সেগুলোকে সেই ফিচারগুলোর ব্যবহারের ধরনের ওপর নির্ভর করে লোকেশন পারমিশনের জন্য অনুরোধ করতে হবে।
একটি অবস্থানের অনুরোধ সেট আপ করুন
ফিউজড লোকেশন প্রোভাইডারে করা অনুরোধের জন্য প্যারামিটার সংরক্ষণ করতে, একটি LocationRequest তৈরি করুন। এই প্যারামিটারগুলো লোকেশন অনুরোধের নির্ভুলতার মাত্রা নির্ধারণ করে। উপলব্ধ সমস্ত লোকেশন অনুরোধ বিকল্পের বিস্তারিত জানতে, LocationRequest ক্লাস রেফারেন্স দেখুন। এই পাঠে, নিচে বর্ণিত পদ্ধতি অনুযায়ী আপডেট ইন্টারভাল, দ্রুততম আপডেট ইন্টারভাল এবং প্রায়োরিটি নির্ধারণ করা হয়:
- আপডেট ব্যবধান
-
setIntervalMillis()- এই মেথডটি মিলিসেকেন্ডে সেই হার নির্ধারণ করে, যে হারে আপনার অ্যাপ লোকেশন আপডেট পেতে পছন্দ করে। মনে রাখবেন যে, ব্যাটারির ব্যবহার অপ্টিমাইজ করার জন্য লোকেশন আপডেটগুলো এই হারের চেয়ে কিছুটা দ্রুত বা ধীর হতে পারে, অথবা কোনো আপডেট নাও আসতে পারে (উদাহরণস্বরূপ, যদি ডিভাইসে কোনো কানেক্টিভিটি না থাকে)। - দ্রুততম আপডেট ব্যবধান
-
setMinUpdateIntervalMillis()- এই মেথডটি মিলিসেকেন্ডে দ্রুততম হার নির্ধারণ করে, যে হারে আপনার অ্যাপ লোকেশন আপডেটগুলি পরিচালনা করতে পারে। যদি না আপনার অ্যাপsetInterval()-এ নির্দিষ্ট করা হারের চেয়ে দ্রুত আপডেট পেয়ে উপকৃত হয়, তবে আপনার এই মেথডটি কল করার প্রয়োজন নেই। - অগ্রাধিকার
setPriority()- এই মেথডটি রিকোয়েস্টের প্রায়োরিটি সেট করে, যা গুগল প্লে সার্ভিসেস-এর লোকেশন সার্ভিসকে কোন লোকেশন সোর্স ব্যবহার করতে হবে সে সম্পর্কে একটি জোরালো ইঙ্গিত দেয়। নিম্নলিখিত ভ্যালুগুলো সাপোর্টেড:-
PRIORITY_BALANCED_POWER_ACCURACY- একটি সিটি ব্লকের মধ্যে অবস্থানের নির্ভুলতা অনুরোধ করতে এই সেটিংটি ব্যবহার করুন, যার নির্ভুলতা প্রায় ১০০ মিটার। এটিকে একটি স্থূল স্তরের নির্ভুলতা হিসাবে বিবেচনা করা হয় এবং এতে শক্তি খরচ হওয়ার সম্ভাবনা কম। এই সেটিংটি চালু থাকলে, লোকেশন সার্ভিসগুলো সম্ভবত ওয়াইফাই এবং সেল টাওয়ার পজিশনিং ব্যবহার করবে। তবে মনে রাখবেন, লোকেশন প্রোভাইডার নির্বাচন আরও অনেক বিষয়ের উপর নির্ভর করে, যেমন কোন উৎসগুলো উপলব্ধ আছে। -
PRIORITY_HIGH_ACCURACY- সম্ভাব্য সবচেয়ে নির্ভুল অবস্থানের অনুরোধ করতে এই সেটিংটি ব্যবহার করুন। এই সেটিংটি চালু থাকলে, অবস্থান নির্ধারণের জন্য লোকেশন সার্ভিসগুলোর জিপিএস ব্যবহার করার সম্ভাবনা বেশি থাকে। -
PRIORITY_LOW_POWER- শহর-স্তরের নির্ভুলতা অনুরোধ করতে এই সেটিংটি ব্যবহার করুন, যার সঠিকতা প্রায় ১০ কিলোমিটার। এটিকে একটি স্থূল স্তরের নির্ভুলতা হিসাবে বিবেচনা করা হয় এবং এতে শক্তি খরচ হওয়ার সম্ভাবনা কম। -
PRIORITY_PASSIVE- বিদ্যুৎ খরচে নগণ্য প্রভাব চাইলে, কিন্তু লোকেশন আপডেট পাওয়া গেলে তা পেতে চাইলে এই সেটিংটি ব্যবহার করুন। এই সেটিংটি চালু থাকলে, আপনার অ্যাপ কোনো লোকেশন আপডেট চালু করবে না, কিন্তু অন্য অ্যাপের পাঠানো লোকেশন আপডেট গ্রহণ করবে।
-
এই কোড নমুনায় দেখানো অনুযায়ী লোকেশন রিকোয়েস্টটি তৈরি করুন এবং প্যারামিটারগুলো সেট করুন:
কোটলিন
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 পারমিশন সেটিং এবং ৫০০০ মিলিসেকেন্ড (৫ সেকেন্ড) এর একটি দ্রুত আপডেট ইন্টারভ্যাল—এই সবকিছুর সমন্বয়ে ফিউজড লোকেশন প্রোভাইডার এমন লোকেশন আপডেট প্রদান করে যা কয়েক ফুটের মধ্যে নির্ভুল থাকে। এই পদ্ধতিটি সেইসব ম্যাপিং অ্যাপের জন্য উপযুক্ত, যেগুলো রিয়েল টাইমে লোকেশন প্রদর্শন করে।
পারফরম্যান্স টিপস: আপনার অ্যাপ যদি লোকেশন আপডেট পাওয়ার পর নেটওয়ার্ক অ্যাক্সেস করে বা অন্য কোনো দীর্ঘ সময় ধরে চলা কাজ করে, তাহলে দ্রুততম ইন্টারভ্যালটিকে একটি ধীরগতির মানে অ্যাডজাস্ট করুন। এই অ্যাডজাস্টমেন্টটি আপনার অ্যাপকে এমন আপডেট গ্রহণ করা থেকে বিরত রাখে যা এটি ব্যবহার করতে পারবে না। দীর্ঘ সময় ধরে চলা কাজটি শেষ হয়ে গেলে, দ্রুততম ইন্টারভ্যালটিকে আবার একটি দ্রুত মানে সেট করুন।
বর্তমান অবস্থান সেটিংস পান
একবার আপনি গুগল প্লে সার্ভিসেস এবং লোকেশন সার্ভিসেস এপিআই-এর সাথে সংযুক্ত হয়ে গেলে, আপনি একজন ব্যবহারকারীর ডিভাইসের বর্তমান লোকেশন সেটিংস পেতে পারেন। এটি করার জন্য, একটি LocationSettingsRequest.Builder তৈরি করুন এবং এক বা একাধিক লোকেশন রিকোয়েস্ট যোগ করুন। পূর্ববর্তী ধাপে তৈরি করা লোকেশন রিকোয়েস্টটি কীভাবে যোগ করতে হয়, তা নিচের কোড স্নিপেটে দেখানো হলো:
কোটলিন
val builder = LocationSettingsRequest.Builder() .addLocationRequest(locationRequest)
জাভা
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest);
এরপর বর্তমান অবস্থানের সেটিংস পূরণ হয়েছে কিনা তা পরীক্ষা করুন:
কোটলিন
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 তৈরি করার অনুমতি দেয় কিনা, এবং প্রয়োজনে অবস্থান সেটিংস পরিবর্তন করার জন্য ব্যবহারকারীর কাছে কিভাবে অনুমতি চাইতে হয়:
কোটলিন
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. } } } });
পরবর্তী পাঠ, ‘অবস্থান আপডেটের অনুরোধ’ , আপনাকে দেখাবে কীভাবে নিয়মিত অবস্থানের আপডেট পেতে হয়।