লোকেশন অ্যাক্সেস করার অনুমতি চাওয়া

Android-এ ব্যবহারকারীর লোকেশন সংক্রান্ত তথ্য অনুরোধ করার একাধিক উপায় আছে এবং ব্যবহারের কেস অনুযায়ী সেরা পথ আলাদা হয়। এই নির্দেশিকায় লোকেশন অ্যাক্সেস সংক্রান্ত বিভিন্ন পরিস্থিতি বর্ণনা করা হয়েছে এবং প্রতিটি ক্ষেত্রে কীভাবে লোকেশন সংক্রান্ত অনুমতি চাইতে হবে তা ব্যাখ্যা করা হয়েছে।

শুরু করতে, সব রানটাইম অনুমতির জন্য পেশাদার পদ্ধতি এবং অনুমতির অনুরোধ কমানোর জন্য আরও বিস্তারিত নির্দেশিকা পর্যালোচনা করুন।

লোকেশন অ্যাক্সেসের ধরন

প্রতিটি অনুমতির সাথে নিম্নলিখিত বৈশিষ্ট্যগুলির একটি কম্বিনেশন থাকে:

ফোরগ্রাউন্ড লোকেশন

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

  • নেভিগেশন অ্যাপের মধ্যে, একটি ফিচার ব্যবহারকারীদের এক এক করে দিকনির্দেশ পেতে দেয়।
  • মেসেজিং অ্যাপের মধ্যে, একটি ফিচার ব্যবহারকারীদের তাদের বর্তমান লোকেশন অন্য ব্যবহারকারীর সাথে শেয়ার করতে দেয়।

আপনার অ্যাপের কোনও ফিচার নিম্নলিখিত কোনও পরিস্থিতিতে ডিভাইসের বর্তমান লোকেশন অ্যাক্সেস করলে, সিস্টেম ধরে নেয় যে আপনার অ্যাপ ফোরগ্রাউন্ড লোকেশন ব্যবহার করছে:

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

    এছাড়াও, আপনাকে location-এর ফোরগ্রাউন্ড পরিষেবার ধরন ঘোষণা করতে হবে, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে। Android 10 (API লেভেল 29) এবং এর পরবর্তী যেকোনও ভার্সনে, আপনাকে এই ফোরগ্রাউন্ড পরিষেবার ধরন ঘোষণা করতে হবে।

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

আপনার অ্যাপ ACCESS_COARSE_LOCATION অনুমতি বা ACCESS_FINE_LOCATION অনুমতির অনুরোধ করলে, আপনি ফোরগ্রাউন্ড লোকেশনের প্রয়োজনীয়তা ঘোষণা করেন, যেমনটি নিম্নলিখিত স্নিপেটে দেখানো হয়েছে:

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

একবার অ্যাক্সেস ফোরগ্রাউন্ডে লোকেশন ডেটা অ্যাক্সেস করার পাশাপাশি, কিছু ব্যবহারের ক্ষেত্রে অ্যাপ ব্যবহারের সময় ক্রমাগত আপডেট করার পরিবর্তে, অ্যাপ অভিজ্ঞতার নির্দিষ্ট পয়েন্টে ব্যবহারকারীর লোকেশন অ্যাক্সেস করার অতিরিক্ত পার্থক্য রয়েছে। এইসব ক্ষেত্রে, অ্যাপের সেই নির্দিষ্ট সেশনের জন্য লোকেশন অ্যাক্সেসের অনুরোধ করতে, অ্যাপকে লোকেশন বোতাম ব্যবহার করতে হবে। এছাড়াও, আপনার অ্যাপ Android 17 (API লেভেল 37) বা তার পরের কোনও ভার্সনকে টার্গেট করলে এবং শুধুমাত্র সেশন-ভিত্তিক লোকেশন অ্যাক্সেস প্রয়োজন এমন ফিচার থাকলে, Google Play নীতি অনুযায়ী আপনাকে লোকেশন বোতাম ব্যবহার করতে হবে। আরও জানতে, লোকেশন বোতাম নীতি দেখুন।

ব্যাকগ্রাউন্ড লোকেশন

অ্যাপের মধ্যে কোনও ফিচার ক্রমাগত অন্যান্য ব্যবহারকারীর সাথে লোকেশন শেয়ার করলে বা Geofencing API ব্যবহার করলে, অ্যাপের ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করার প্রয়োজন হয়। কয়েকটি উদাহরণ নিচে দেওয়া হল:

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

ফোরগ্রাউন্ড লোকেশন বিভাগে বর্ণিত পরিস্থিতি ছাড়া অন্য কোনও পরিস্থিতিতে ডিভাইসের বর্তমান লোকেশন অ্যাক্সেস করলে, সিস্টেম বিবেচনা করে যে আপনার অ্যাপ ব্যাকগ্রাউন্ড লোকেশন ব্যবহার করছে। ব্যাকগ্রাউন্ড লোকেশন প্রিসিশন ফোরগ্রাউন্ড লোকেশন প্রিসিশন-এর মতোই, যা আপনার অ্যাপের ঘোষণা করা লোকেশন অনুমতির উপর নির্ভর করে।

Android 10 (API লেভেল 29) এবং তার পরবর্তী ভার্সনে, রানটাইমে ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের অনুরোধ করতে, আপনার অ্যাপের ম্যানিফেস্টে ACCESS_BACKGROUND_LOCATION অনুমতি ঘোষণা করতে হবে। Android-এর পুরনো ভার্সনে, আপনার অ্যাপ ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস পেলে, এটি অটোমেটিক ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসও পেয়ে যায়।

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

যথার্থতা

Android-এ লোকেশন অ্যাকুরেসির নিম্নলিখিত লেভেল কাজ করে:

নিকটবর্তী
ডিভাইসের আনুমানিক লোকেশন প্রদান করে। এই লোকেশন অনুমান যদি LocationManagerService বা FusedLocationProvider থেকে করা হয়, তাহলে এই অনুমান প্রায় ৩ বর্গ কিলোমিটার (প্রায় ১.২ বর্গ মাইল) এলাকার মধ্যে সঠিক হয়। আপনি ACCESS_COARSE_LOCATION অনুমতি ঘোষণা করলেও ACCESS_FINE_LOCATION অনুমতি ঘোষণা না করলে, আপনার অ্যাপ এই লেভেলের অ্যাকুরেসি সহ লোকেশন পেতে পারে।
সুনির্দিষ্ট
ডিভাইসের লোকেশন সম্পর্কে যতটা সম্ভব সঠিক অনুমান প্রদান করে। লোকেশন অনুমান LocationManagerService বা FusedLocationProvider থেকে করা হলে, এই অনুমান সাধারণত ৫০ মিটার (১৬০ ফুট) এবং কখনও কখনও কয়েক মিটার (১০ ফুট) বা তার চেয়েও কম দূরত্বের মধ্যে হয়। আপনি ACCESS_FINE_LOCATION অনুমতি ঘোষণা করলে, আপনার অ্যাপ এই লেভেলের অ্যাকুরেসি সহ লোকেশন রিসিভ করতে পারবে।

ব্যবহারকারী আনুমানিক লোকেশন অ্যাক্সেস করার অনুমতি দিলে, আপনার অ্যাপ কোন লোকেশন অ্যাক্সেস করার অনুমতি ঘোষণা করেছে তা নির্বিশেষে, আপনার অ্যাপের কাছে শুধুমাত্র আনুমানিক লোকেশন অ্যাক্সেস করার অনুমতি থাকে।

ব্যবহারকারী শুধুমাত্র আনুমানিক লোকেশন অ্যাক্সেস করার অনুমতি দিলেও আপনার অ্যাপ কাজ করা চালিয়ে যেতে হবে। আপনার অ্যাপের কোনও ফিচারের জন্য ACCESS_FINE_LOCATION অনুমতি ব্যবহার করে সুনির্দিষ্ট লোকেশন অ্যাক্সেস করার প্রয়োজন হলে, আপনি ব্যবহারকারীকে আপনার অ্যাপকে সুনির্দিষ্ট লোকেশন অ্যাক্সেস করার অনুমতি দিতে বলতে পারেন।

ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করার অনুমতি সংক্রান্ত রিমাইন্ডার

Android 10 (API লেভেল ২৯) এবং তার পরবর্তী ভার্সনে, ব্যবহারকারী ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করার অনুমতি দেওয়ার পরে, আপনার অ্যাপের কোনও ফিচার প্রথমবার ব্যাকগ্রাউন্ডে ডিভাইসের লোকেশন অ্যাক্সেস করলে, সিস্টেম ব্যবহারকারীকে একটি বিজ্ঞপ্তি পাঠানোর জন্য শিডিউল করে। এই বিজ্ঞপ্তি ব্যবহারকারীকে মনে করিয়ে দেয় যে তিনি আপনার অ্যাপকে ডিভাইসের লোকেশন সব সময় অ্যাক্সেস করার অনুমতি দিয়েছেন। ৮ নম্বর ছবিতে একটি উদাহরণ বিজ্ঞপ্তি দেখানো হয়েছে।

আপনার অ্যাপের SDK ডিপেন্ডেন্সিতে লোকেশন সংক্রান্ত প্রয়োজনীয়তা চেক করুন

আপনার অ্যাপ লোকেশন সংক্রান্ত অনুমতির উপর নির্ভর করে এমন কোনও SDK ব্যবহার করে কিনা তা চেক করুন, বিশেষ করে ACCESS_FINE_LOCATION অনুমতি। আরও জানতে Medium-এ আপনার SDK ডিপেন্ডেন্সির আচরণ সম্পর্কে জানা ব্লগ পোস্ট দেখুন।

অতিরিক্ত রিসোর্স

Android-এ লোকেশন সংক্রান্ত অনুমতির বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত মেটেরিয়াল দেখুন:

কোডল্যাবস

ভিডিও

নমুনা