অবস্থান সেটিংস পরিবর্তন করুন

আপনার অ্যাপের লোকেশনের অনুরোধ বা অনুমতি আপডেট পাওয়ার প্রয়োজন হলে, ডিভাইসটিকে উপযুক্ত সিস্টেম সেটিংস সক্ষম করতে হবে, যেমন GPS বা Wi-Fi স্ক্যানিং। ডিভাইসের GPS-এর মতো পরিষেবাগুলিকে সরাসরি সক্ষম করার পরিবর্তে, আপনার অ্যাপ সঠিকতা/বিদ্যুৎ খরচ এবং কাঙ্ক্ষিত আপডেট ব্যবধানের প্রয়োজনীয় স্তর নির্দিষ্ট করে এবং ডিভাইসটি স্বয়ংক্রিয়ভাবে সিস্টেম সেটিংসে উপযুক্ত পরিবর্তন করে। এই সেটিংস LocationRequest ডেটা অবজেক্ট দ্বারা সংজ্ঞায়িত করা হয়।

এই পাঠটি আপনাকে দেখায় কিভাবে সেটিংস ক্লায়েন্ট ব্যবহার করে কোন সেটিংস সক্ষম করা আছে তা পরীক্ষা করতে হবে এবং ব্যবহারকারীর জন্য একটি ট্যাপ দিয়ে তাদের সেটিংস আপডেট করতে লোকেশন সেটিংস ডায়ালগ উপস্থাপন করুন৷

অবস্থান পরিষেবাগুলি কনফিগার করুন

Google Play পরিষেবা এবং ফিউজড লোকেশন প্রদানকারীর দ্বারা প্রদত্ত অবস্থান পরিষেবাগুলি ব্যবহার করার জন্য, সেটিংস ক্লায়েন্ট ব্যবহার করে আপনার অ্যাপটি সংযুক্ত করুন, তারপর বর্তমান অবস্থান সেটিংস পরীক্ষা করুন এবং প্রয়োজনে প্রয়োজনীয় সেটিংস সক্ষম করার জন্য ব্যবহারকারীকে অনুরোধ করুন৷

যে অ্যাপগুলির বৈশিষ্ট্যগুলি অবস্থান পরিষেবাগুলি ব্যবহার করে সেগুলিকে অবশ্যই অবস্থানের অনুমতির অনুরোধ করতে হবে, সেই বৈশিষ্ট্যগুলির ব্যবহারের ক্ষেত্রে নির্ভর করে৷

একটি অবস্থান অনুরোধ সেট আপ করুন

ফিউজড অবস্থান প্রদানকারীর কাছে অনুরোধের পরামিতি সঞ্চয় করতে, একটি LocationRequest তৈরি করুন। পরামিতিগুলি অবস্থানের অনুরোধের জন্য নির্ভুলতার স্তর নির্ধারণ করে। সমস্ত উপলব্ধ অবস্থানের অনুরোধ বিকল্পগুলির বিশদ বিবরণের জন্য, LocationRequest শ্রেণীর রেফারেন্স দেখুন৷ এই পাঠটি আপডেটের ব্যবধান, দ্রুততম আপডেটের ব্যবধান এবং অগ্রাধিকার সেট করে, যেমনটি নীচে বর্ণনা করা হয়েছে:

আপডেটের ব্যবধান
setInterval() - এই পদ্ধতিটি মিলিসেকেন্ডে হার সেট করে যেখানে আপনার অ্যাপ অবস্থান আপডেট পেতে পছন্দ করে। নোট করুন যে ব্যাটারি ব্যবহারের জন্য অপ্টিমাইজ করার জন্য অবস্থানের আপডেটগুলি এই হারের চেয়ে কিছুটা দ্রুত বা ধীর হতে পারে, বা কোনও আপডেট নাও থাকতে পারে (উদাহরণস্বরূপ, ডিভাইসটির কোনও সংযোগ না থাকলে)।
দ্রুততম আপডেট ব্যবধান
setFastestInterval() - এই পদ্ধতিটি মিলিসেকেন্ডে দ্রুততম হার সেট করে যেখানে আপনার অ্যাপ অবস্থান আপডেটগুলি পরিচালনা করতে পারে৷ setInterval() এ উল্লেখিত হারের চেয়ে দ্রুত আপডেট পাওয়ার থেকে আপনার অ্যাপ উপকৃত না হলে, আপনাকে এই পদ্ধতিতে কল করার দরকার নেই।
অগ্রাধিকার

setPriority() - এই পদ্ধতিটি অনুরোধের অগ্রাধিকার সেট করে, যা Google Play পরিষেবাগুলির অবস্থান পরিষেবাগুলিকে কোন অবস্থানের উত্সগুলি ব্যবহার করতে হবে সে সম্পর্কে একটি শক্তিশালী ইঙ্গিত দেয়৷ নিম্নলিখিত মানগুলি সমর্থিত:

  • PRIORITY_BALANCED_POWER_ACCURACY - একটি শহরের ব্লকের মধ্যে অবস্থানের নির্ভুলতা অনুরোধ করতে এই সেটিংটি ব্যবহার করুন, যা প্রায় 100 মিটারের নির্ভুলতা। এটি নির্ভুলতার একটি মোটা স্তর হিসাবে বিবেচিত হয় এবং সম্ভবত কম শক্তি খরচ করে৷ এই সেটিং সহ, অবস্থান পরিষেবাগুলি ওয়াইফাই এবং সেল টাওয়ার পজিশনিং ব্যবহার করতে পারে৷ উল্লেখ্য, যাইহোক, অবস্থান প্রদানকারীর পছন্দ অন্যান্য অনেক কারণের উপর নির্ভর করে, যেমন কোন উৎসগুলি উপলব্ধ।
  • PRIORITY_HIGH_ACCURACY - সম্ভাব্য সর্বাধিক সুনির্দিষ্ট অবস্থানের অনুরোধ করতে এই সেটিংটি ব্যবহার করুন৷ এই সেটিং এর মাধ্যমে, অবস্থান নির্ণয় করার জন্য অবস্থান পরিষেবাগুলি GPS ব্যবহার করার সম্ভাবনা বেশি।
  • PRIORITY_LOW_POWER - শহর-স্তরের নির্ভুলতার অনুরোধ করতে এই সেটিংটি ব্যবহার করুন, যা প্রায় 10 কিলোমিটারের নির্ভুলতা। এটি নির্ভুলতার একটি মোটা স্তর হিসাবে বিবেচিত হয় এবং সম্ভবত কম শক্তি খরচ করে৷
  • PRIORITY_NO_POWER - এই সেটিংটি ব্যবহার করুন যদি আপনার বিদ্যুত খরচের উপর নগণ্য প্রভাবের প্রয়োজন হয়, কিন্তু উপলব্ধ হলে অবস্থান আপডেট পেতে চান। এই সেটিং এর মাধ্যমে, আপনার অ্যাপ কোনো অবস্থানের আপডেট ট্রিগার করে না, তবে অন্যান্য অ্যাপ দ্বারা ট্রিগার করা অবস্থানগুলি গ্রহণ করে।

অবস্থানের অনুরোধ তৈরি করুন এবং এই কোড নমুনায় দেখানো হিসাবে প্যারামিটার সেট করুন:

কোটলিন

fun createLocationRequest() {
  val locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build()
}

জাভা

protected void createLocationRequest() {
  LocationRequest locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build();
}

PRIORITY_HIGH_ACCURACY এর অগ্রাধিকার, ACCESS_FINE_LOCATION অনুমতি সেটিংসের সাথে মিলিত যা আপনি অ্যাপ ম্যানিফেস্টে সংজ্ঞায়িত করেছেন এবং 5000 মিলিসেকেন্ড (5 সেকেন্ড) এর একটি দ্রুত আপডেটের ব্যবধান, যা কিছুর মধ্যেই নির্ভুল অবস্থানের আপডেট ফেরত দেয়। ফুট এই পদ্ধতিটি ম্যাপিং অ্যাপগুলির জন্য উপযুক্ত যা রিয়েল টাইমে অবস্থান প্রদর্শন করে।

পারফরম্যান্স ইঙ্গিত: যদি আপনার অ্যাপটি নেটওয়ার্ক অ্যাক্সেস করে বা অবস্থান আপডেট পাওয়ার পরে অন্যান্য দীর্ঘমেয়াদী কাজ করে, তাহলে দ্রুততম ব্যবধানটিকে একটি ধীর মানতে সামঞ্জস্য করুন। এই সমন্বয় আপনার অ্যাপ ব্যবহার করতে পারে না এমন আপডেট পেতে বাধা দেয়। একবার দীর্ঘমেয়াদী কাজ শেষ হয়ে গেলে, দ্রুততম ব্যবধানটিকে একটি দ্রুত মান সেট করুন।

বর্তমান অবস্থান সেটিংস পান

একবার আপনি 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 যোগ করুন যা অবস্থান সেটিংস যাচাই করে। তারপর, পরীক্ষা করুন যে Exception বস্তুটি onFailure() পদ্ধতিতে পাস করা হয়েছে তা 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.
            }
        }
    }
});

পরবর্তী পাঠ, অবস্থানের আপডেট প্রাপ্তি , আপনাকে দেখায় কিভাবে পর্যায়ক্রমিক অবস্থানের আপডেট পেতে হয়।