যদি আপনার অ্যাপের লোকেশনের অনুরোধ করতে হয় অথবা অনুমতির আপডেট পেতে হয়, তাহলে ডিভাইসটিকে উপযুক্ত সিস্টেম সেটিংস, যেমন GPS বা Wi-Fi স্ক্যানিং সক্ষম করতে হবে। ডিভাইসের GPS এর মতো পরিষেবাগুলি সরাসরি সক্ষম করার পরিবর্তে, আপনার অ্যাপটি প্রয়োজনীয় নির্ভুলতা/বিদ্যুৎ খরচের স্তর এবং পছন্দসই আপডেট ব্যবধান নির্দিষ্ট করে এবং ডিভাইসটি স্বয়ংক্রিয়ভাবে সিস্টেম সেটিংসে যথাযথ পরিবর্তন করে। এই সেটিংসগুলি LocationRequest ডেটা অবজেক্ট দ্বারা সংজ্ঞায়িত করা হয়।
এই পাঠে আপনাকে দেখানো হবে কিভাবে সেটিংস ক্লায়েন্ট ব্যবহার করে কোন সেটিংস সক্রিয় আছে তা পরীক্ষা করতে হয় এবং ব্যবহারকারীর জন্য অবস্থান সেটিংস ডায়ালগ উপস্থাপন করা হয় যাতে তারা কেবল একটি ট্যাপ দিয়ে তাদের সেটিংস আপডেট করতে পারে।
অবস্থান পরিষেবা কনফিগার করুন
গুগল প্লে সার্ভিসেস এবং ফিউজড লোকেশন প্রোভাইডার দ্বারা প্রদত্ত লোকেশন পরিষেবাগুলি ব্যবহার করার জন্য, সেটিংস ক্লায়েন্ট ব্যবহার করে আপনার অ্যাপটি সংযুক্ত করুন, তারপরে বর্তমান লোকেশন সেটিংস পরীক্ষা করুন এবং প্রয়োজনে ব্যবহারকারীকে প্রয়োজনীয় সেটিংস সক্ষম করতে অনুরোধ করুন।
যেসব অ্যাপের বৈশিষ্ট্যগুলি লোকেশন পরিষেবা ব্যবহার করে, তাদের অবশ্যই লোকেশন অনুমতির অনুরোধ করতে হবে, যা সেই বৈশিষ্ট্যগুলির ব্যবহারের ক্ষেত্রে নির্ভর করে।
একটি লোকেশন রিকোয়েস্ট সেট আপ করুন
ফিউজড লোকেশন প্রোভাইডারে অনুরোধের জন্য প্যারামিটার সংরক্ষণ করতে, একটি LocationRequest তৈরি করুন। প্যারামিটারগুলি লোকেশন অনুরোধের নির্ভুলতার স্তর নির্ধারণ করে। সমস্ত উপলব্ধ লোকেশন অনুরোধ বিকল্পের বিশদ বিবরণের জন্য, LocationRequest ক্লাস রেফারেন্স দেখুন। এই পাঠটি নীচে বর্ণিত আপডেট ব্যবধান, দ্রুততম আপডেট ব্যবধান এবং অগ্রাধিকার নির্ধারণ করে:
- আপডেট ব্যবধান
-
setIntervalMillis()- এই পদ্ধতিটি মিলিসেকেন্ডে হার নির্ধারণ করে যে হারে আপনার অ্যাপ অবস্থান আপডেট পেতে পছন্দ করে। মনে রাখবেন যে ব্যাটারি ব্যবহারের জন্য অপ্টিমাইজ করার জন্য অবস্থান আপডেটগুলি এই হারের চেয়ে কিছুটা দ্রুত বা ধীর হতে পারে, অথবা কোনও আপডেট নাও থাকতে পারে (উদাহরণস্বরূপ, যদি ডিভাইসটির কোনও সংযোগ না থাকে)। - দ্রুততম আপডেট ব্যবধান
-
setMinUpdateIntervalMillis()- এই পদ্ধতিটি মিলিসেকেন্ডে দ্রুততম হার নির্ধারণ করে যেখানে আপনার অ্যাপ অবস্থান আপডেট পরিচালনা করতে পারে। যদি না আপনার অ্যাপsetInterval()এ নির্দিষ্ট হারের চেয়ে দ্রুত আপডেট গ্রহণের সুবিধা পায়, তাহলে আপনাকে এই পদ্ধতিটি কল করার প্রয়োজন নেই। - অগ্রাধিকার
setPriority()- এই পদ্ধতিটি অনুরোধের অগ্রাধিকার নির্ধারণ করে, যা Google Play পরিষেবার লোকেশন পরিষেবাগুলিকে কোন লোকেশন সোর্স ব্যবহার করতে হবে সে সম্পর্কে একটি শক্তিশালী ইঙ্গিত দেয়। নিম্নলিখিত মানগুলি সমর্থিত:-
PRIORITY_BALANCED_POWER_ACCURACY- শহরের ব্লকের মধ্যে অবস্থানের নির্ভুলতা অনুরোধ করতে এই সেটিংটি ব্যবহার করুন, যার নির্ভুলতা প্রায় ১০০ মিটার। এটিকে একটি মোটামুটি নির্ভুলতা হিসাবে বিবেচনা করা হয় এবং এতে কম বিদ্যুৎ খরচ হওয়ার সম্ভাবনা থাকে। এই সেটিং ব্যবহার করে, অবস্থান পরিষেবাগুলি ওয়াইফাই এবং সেল টাওয়ার পজিশনিং ব্যবহার করার সম্ভাবনা বেশি। তবে মনে রাখবেন, অবস্থান সরবরাহকারীর পছন্দ অন্যান্য অনেক বিষয়ের উপর নির্ভর করে, যেমন কোন উৎসগুলি উপলব্ধ। -
PRIORITY_HIGH_ACCURACY- সম্ভাব্য সবচেয়ে সুনির্দিষ্ট অবস্থানের জন্য অনুরোধ করতে এই সেটিংটি ব্যবহার করুন। এই সেটিং ব্যবহার করে, অবস্থান পরিষেবাগুলি অবস্থান নির্ধারণের জন্য GPS ব্যবহার করার সম্ভাবনা বেশি থাকে। -
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(); }
অ্যাপ ম্যানিফেস্টে আপনার দ্বারা সংজ্ঞায়িত ACCESS_FINE_LOCATION অনুমতি সেটিং এবং 5000 মিলিসেকেন্ড (5 সেকেন্ড) এর দ্রুত আপডেট ব্যবধানের সাথে PRIORITY_HIGH_ACCURACY এর অগ্রাধিকার, ফিউজড লোকেশন প্রোভাইডারকে কয়েক ফুটের মধ্যে সঠিক লোকেশন আপডেটগুলি ফেরত পাঠাতে বাধ্য করে। এই পদ্ধতিটি রিয়েল টাইমে লোকেশন প্রদর্শনকারী অ্যাপগুলির ম্যাপিংয়ের জন্য উপযুক্ত।
পারফরম্যান্সের ইঙ্গিত: যদি আপনার অ্যাপটি লোকেশন আপডেট পাওয়ার পরে নেটওয়ার্ক অ্যাক্সেস করে অথবা দীর্ঘমেয়াদী অন্যান্য কাজ করে, তাহলে দ্রুততম ব্যবধানটিকে একটি ধীর মানের সাথে সামঞ্জস্য করুন। এই সমন্বয়টি আপনার অ্যাপটিকে এমন আপডেটগুলি পেতে বাধা দেয় যা এটি ব্যবহার করতে পারে না। দীর্ঘমেয়াদী কাজ শেষ হয়ে গেলে, দ্রুততম ব্যবধানটিকে একটি দ্রুত মানের সাথে পুনরায় সেট করুন।
বর্তমান অবস্থান সেটিংস পান
একবার আপনি Google Play পরিষেবা এবং লোকেশন পরিষেবা API-এর সাথে সংযুক্ত হয়ে গেলে, আপনি একজন ব্যবহারকারীর ডিভাইসের বর্তমান অবস্থান সেটিংস পেতে পারেন। এটি করার জন্য, একটি 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. } } } });
পরবর্তী পাঠ, "অবস্থান আপডেটের অনুরোধ করুন" , আপনাকে দেখাবে কিভাবে পর্যায়ক্রমিক অবস্থান আপডেট পেতে হয়।