অবস্থান আপডেট অনুরোধ

অবস্থানের তথ্যের যথাযথ ব্যবহার আপনার অ্যাপের ব্যবহারকারীদের জন্য উপকারী হতে পারে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ ব্যবহারকারীকে হাঁটা বা গাড়ি চালানোর সময় তাদের পথ খুঁজে পেতে সাহায্য করে, অথবা যদি আপনার অ্যাপ সম্পদের অবস্থান ট্র্যাক করে, তবে এটিকে নিয়মিত বিরতিতে ডিভাইসের অবস্থান পেতে হবে। ভৌগোলিক অবস্থানের (অক্ষাংশ এবং দ্রাঘিমাংশ) পাশাপাশি আপনি ব্যবহারকারীকে আরও তথ্য দিতে চাইতে পারেন যেমন বিয়ারিং (ভ্রমণের অনুভূমিক দিক), উচ্চতা বা ডিভাইসের বেগ। এই তথ্য এবং আরও অনেক কিছু Location অবজেক্টে পাওয়া যায় যা আপনার অ্যাপ ফিউজড লোকেশন প্রদানকারী থেকে পুনরুদ্ধার করতে পারে। প্রতিক্রিয়া হিসাবে, এপিআই আপনার অ্যাপকে পর্যায়ক্রমে সর্বোত্তম উপলব্ধ অবস্থানের সাথে আপডেট করে, বর্তমানে-উপলব্ধ অবস্থান প্রদানকারী যেমন WiFi এবং GPS (গ্লোবাল পজিশনিং সিস্টেম) এর উপর ভিত্তি করে। অবস্থানের যথার্থতা প্রদানকারীদের দ্বারা নির্ধারিত হয়, আপনার অনুরোধ করা অবস্থানের অনুমতি এবং আপনি অবস্থানের অনুরোধে যে বিকল্পগুলি সেট করেছেন।

এই পাঠটি আপনাকে দেখায় কিভাবে ফিউজড লোকেশন প্রোভাইডারে requestLocationUpdates() পদ্ধতি ব্যবহার করে একটি ডিভাইসের অবস্থান সম্পর্কে নিয়মিত আপডেটের অনুরোধ করতে হয়।

সর্বশেষ পরিচিত অবস্থান পান

ডিভাইসের সর্বশেষ পরিচিত অবস্থানটি একটি সহজ বেস প্রদান করে যেখান থেকে শুরু করা যায়, পর্যায়ক্রমিক অবস্থান আপডেট শুরু করার আগে অ্যাপটির একটি পরিচিত অবস্থান রয়েছে তা নিশ্চিত করে। গেটিং দ্য লাস্ট নোন লোকেশনের পাঠ আপনাকে দেখায় কিভাবে getLastLocation() কল করে সর্বশেষ পরিচিত অবস্থান পেতে হয়। নিম্নলিখিত বিভাগগুলির স্নিপেটগুলি অনুমান করে যে আপনার অ্যাপ ইতিমধ্যেই সর্বশেষ পরিচিত অবস্থানটি পুনরুদ্ধার করেছে এবং গ্লোবাল ভেরিয়েবল mCurrentLocation এ একটি Location অবজেক্ট হিসাবে সংরক্ষণ করেছে।

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

অবস্থানের আপডেটের অনুরোধ করার আগে, আপনার অ্যাপকে অবশ্যই লোকেশন পরিষেবার সাথে সংযোগ করতে হবে এবং একটি অবস্থানের অনুরোধ করতে হবে। লোকেশন সেটিংস পরিবর্তন করার পাঠটি আপনাকে দেখায় কিভাবে এটি করতে হয়। লোকেশন রিকোয়েস্ট হয়ে গেলে আপনি requestLocationUpdates() এ কল করে নিয়মিত আপডেট শুরু করতে পারেন।

অনুরোধের ফর্মের উপর নির্ভর করে, সংমিশ্রিত অবস্থান প্রদানকারী হয় LocationCallback.onLocationResult() কলব্যাক পদ্ধতিটি চালু করে এবং এটিকে Location অবজেক্টের একটি তালিকা পাস করে, অথবা একটি PendingIntent ইস্যু করে যার বর্ধিত ডেটাতে অবস্থান রয়েছে। আপডেটের যথার্থতা এবং ফ্রিকোয়েন্সি আপনার অনুরোধ করা অবস্থানের অনুমতি এবং আপনি অবস্থান অনুরোধ অবজেক্টে যে বিকল্পগুলি সেট করেছেন তার দ্বারা প্রভাবিত হয়৷

এই পাঠটি আপনাকে দেখায় কিভাবে LocationCallback কলব্যাক পদ্ধতি ব্যবহার করে আপডেট পেতে হয়। কল requestLocationUpdates() , এটি আপনার LocationRequest অবজেক্টের উদাহরণ এবং একটি LocationCallback পাস করে। নিম্নলিখিত কোড নমুনায় দেখানো হিসাবে একটি startLocationUpdates() পদ্ধতি সংজ্ঞায়িত করুন:

কোটলিন

override fun onResume() {
    super.onResume()
    if (requestingLocationUpdates) startLocationUpdates()
}

private fun startLocationUpdates() {
    fusedLocationClient.requestLocationUpdates(locationRequest,
            locationCallback,
            Looper.getMainLooper())
}

জাভা

@Override
protected void onResume() {
    super.onResume();
    if (requestingLocationUpdates) {
        startLocationUpdates();
    }
}

private void startLocationUpdates() {
    fusedLocationClient.requestLocationUpdates(locationRequest,
            locationCallback,
            Looper.getMainLooper());
}

লক্ষ্য করুন যে উপরের কোড স্নিপেটটি একটি বুলিয়ান ফ্ল্যাগকে নির্দেশ করে, requestingLocationUpdates , ব্যবহারকারী লোকেশন আপডেট চালু বা বন্ধ করেছে কিনা তা ট্র্যাক করতে ব্যবহৃত হয়। ব্যবহারকারীরা অবস্থান আপডেট বন্ধ করে থাকলে, আপনি তাদের আপনার অ্যাপের অবস্থানের প্রয়োজনীয়তা সম্পর্কে জানাতে পারেন। কার্যকলাপের দৃষ্টান্ত জুড়ে বুলিয়ান পতাকার মান ধরে রাখার বিষয়ে আরও জানতে, কার্যকলাপের অবস্থা সংরক্ষণ করুন দেখুন।

অবস্থান আপডেট কলব্যাক সংজ্ঞায়িত করুন

ফিউজড লোকেশন প্রদানকারী LocationCallback.onLocationResult() কলব্যাক পদ্ধতি ব্যবহার করে। ইনকামিং আর্গুমেন্টে অবস্থানের অক্ষাংশ এবং দ্রাঘিমাংশ ধারণকারী একটি তালিকা Location বস্তু রয়েছে। নিম্নলিখিত স্নিপেট দেখায় কিভাবে LocationCallback ইন্টারফেস বাস্তবায়ন করতে হয় এবং পদ্ধতিটি সংজ্ঞায়িত করতে হয়, তারপর লোকেশন আপডেটের টাইমস্ট্যাম্প পান এবং আপনার অ্যাপের ইউজার ইন্টারফেসে অক্ষাংশ, দ্রাঘিমাংশ এবং টাইমস্ট্যাম্প প্রদর্শন করে:

কোটলিন

private lateinit var locationCallback: LocationCallback

// ...

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    locationCallback = object : LocationCallback() {
        override fun onLocationResult(locationResult: LocationResult?) {
            locationResult ?: return
            for (location in locationResult.locations){
                // Update UI with location data
                // ...
            }
        }
    }
}

জাভা

private LocationCallback locationCallback;

// ...

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    locationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Update UI with location data
                // ...
            }
        }
    };
}

অবস্থান আপডেট বন্ধ করুন

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

অবস্থান আপডেট বন্ধ করতে, removeLocationUpdates() এ কল করুন, এটিকে একটি LocationCallback পাস করে, নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

কোটলিন

override fun onPause() {
    super.onPause()
    stopLocationUpdates()
}

private fun stopLocationUpdates() {
    fusedLocationClient.removeLocationUpdates(locationCallback)
}

জাভা

@Override
protected void onPause() {
    super.onPause();
    stopLocationUpdates();
}

private void stopLocationUpdates() {
    fusedLocationClient.removeLocationUpdates(locationCallback);
}

অবস্থান আপডেটগুলি বর্তমানে চালু আছে কিনা তা ট্র্যাক করতে একটি বুলিয়ান ব্যবহার করুন, requestingLocationUpdates ৷ কার্যকলাপের onResume() পদ্ধতিতে, অবস্থানের আপডেটগুলি বর্তমানে সক্রিয় কিনা তা পরীক্ষা করুন এবং যদি না থাকে তবে সেগুলি সক্রিয় করুন:

কোটলিন

override fun onResume() {
    super.onResume()
    if (requestingLocationUpdates) startLocationUpdates()
}

জাভা

@Override
protected void onResume() {
    super.onResume();
    if (requestingLocationUpdates) {
        startLocationUpdates();
    }
}

কার্যকলাপের অবস্থা সংরক্ষণ করুন

ডিভাইসের কনফিগারেশনে একটি পরিবর্তন, যেমন স্ক্রিন ওরিয়েন্টেশন বা ভাষার পরিবর্তন, বর্তমান কার্যকলাপকে ধ্বংস করে দিতে পারে। তাই আপনার অ্যাপটিকে অবশ্যই কার্যকলাপ পুনরায় তৈরি করার জন্য প্রয়োজনীয় তথ্য সংরক্ষণ করতে হবে। এটি করার একটি উপায় হল একটি Bundle অবজেক্টে সংরক্ষিত একটি উদাহরণ অবস্থার মাধ্যমে।

নিম্নলিখিত কোড নমুনা দেখায় কিভাবে ইনস্ট্যান্স অবস্থা সংরক্ষণ করতে কার্যকলাপের onSaveInstanceState() কলব্যাক ব্যবহার করতে হয়:

কোটলিন

override fun onSaveInstanceState(outState: Bundle?) {
    outState?.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, requestingLocationUpdates)
    super.onSaveInstanceState(outState)
}

জাভা

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putBoolean(REQUESTING_LOCATION_UPDATES_KEY,
            requestingLocationUpdates);
    // ...
    super.onSaveInstanceState(outState);
}

ক্রিয়াকলাপের পূর্ববর্তী উদাহরণ থেকে সংরক্ষিত মানগুলি পুনরুদ্ধার করতে একটি updateValuesFromBundle() পদ্ধতির সংজ্ঞা দিন, যদি সেগুলি উপলব্ধ থাকে। নিম্নলিখিত কোড নমুনায় দেখানো হিসাবে কার্যকলাপের onCreate() পদ্ধতি থেকে পদ্ধতিটি কল করুন:

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
    updateValuesFromBundle(savedInstanceState)
}

private fun updateValuesFromBundle(savedInstanceState: Bundle?) {
    savedInstanceState ?: return

    // Update the value of requestingLocationUpdates from the Bundle.
    if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) {
        requestingLocationUpdates = savedInstanceState.getBoolean(
                REQUESTING_LOCATION_UPDATES_KEY)
    }

    // ...

    // Update UI to match restored state
    updateUI()
}

জাভা

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    updateValuesFromBundle(savedInstanceState);
}

private void updateValuesFromBundle(Bundle savedInstanceState) {
    if (savedInstanceState == null) {
        return;
    }

    // Update the value of requestingLocationUpdates from the Bundle.
    if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) {
        requestingLocationUpdates = savedInstanceState.getBoolean(
                REQUESTING_LOCATION_UPDATES_KEY);
    }

    // ...

    // Update UI to match restored state
    updateUI();
}

ইনস্ট্যান্স স্টেট সেভ করার বিষয়ে আরও জানতে, অ্যান্ড্রয়েড অ্যাক্টিভিটি ক্লাস রেফারেন্স দেখুন।

দ্রষ্টব্য: আরও স্থায়ী স্টোরেজের জন্য, আপনি আপনার অ্যাপের SharedPreferences এ ব্যবহারকারীর পছন্দ সংরক্ষণ করতে পারেন। আপনার কার্যকলাপের onPause() পদ্ধতিতে ভাগ করা পছন্দ সেট করুন এবং onResume() এ পছন্দ পুনরুদ্ধার করুন। সংরক্ষণের অভিরুচি সম্পর্কে আরও তথ্যের জন্য, কী-মান সেট সংরক্ষণ করুন পড়ুন।

অতিরিক্ত সম্পদ

আরও জানতে, নিম্নলিখিত সংস্থানগুলির সুবিধা নিন:

নমুনা

  • Android-এ অবস্থানের আপডেট প্রাপ্তি প্রদর্শনের জন্য নমুনা অ্যাপ